220 likes | 283 Views
The Networking Home for Nonprofits. Presented by: Ryan Amari, Kyle Boorky, Eric Czarny, John Ferguson. Department of Computer Science Stonehill College Easton, MA 02357. Background: Computer Science Capstone Course. Most computer science courses are concerned with fundamental principles.
E N D
The Networking Home for Nonprofits Presented by: Ryan Amari, Kyle Boorky, Eric Czarny, John Ferguson Department of Computer Science Stonehill College Easton, MA 02357
Background: Computer Science Capstone Course • Most computer science courses are concerned with fundamental principles. • The Capstone course is concerned with real world software development and delivery. • The Capstone course is writing intensive: project management essay, ethics essay, requirements document, design document, user manual. • The Capstone course is based on a real world software development project with a real client.
Background: Prior Capstone Projects • Automated Ticketing System • Automate and streamline Stonehill College Police parking ticket process. • Merit Point Automation System • Automate and streamline Residence Life Merit Point Program for housing lottery. • This year we wanted to do something a little different.
Background: Computer Science Capstone Project 2007 • The Center for Nonprofit Management • Recent survey showed that nonprofit organizations needed help networking with each other. • Nonprofits are resource constrained. • Networking allows nonprofits to share resources. • Social Networking • A social network connects people who share similar interests, ideas, and goals. • Examples: Facebook, MySpace, Friendster. • Working with the Center for Nonprofit Management, the students in the Computer Science Capstone developed NPOnet.
What is NPOnet? • NPOnet is a social networking system that… • Allows local nonprofit organizations to network with each other through the use of: • Allows the Center for Nonprofit Management collect, analyze, and act on important information about local nonprofit organizations, including: • Maintaining accurate statistics about nonprofits. • Analyzing social networks for groups/nonprofits of current interest. • Analyzing shared resources/message boards for topics of current interest.
The View: JSP and JSTL <table width="90%" style="margin: 10px auto 10px auto;"> <tr> <td align="left"><strong>Name:</strong></td> <td id="group_name"><c:out value="${group.name}"/></td> </tr> <tr> <td><strong>Description:</strong></td> <td id="group_description"><c:out value="${group.description}"/></td> </tr> <tr> <td align="left"><strong>Owner:</strong></td> <td><a href='profile?id=<c:out value="${group.ownerID}"/>'><c:out value="${group.ownerName}"/></a></td> </tr> <tr> <td><strong>Privacy:</strong></td> <td> <c:choose> <c:when test="${group.isPublic}">Public</c:when><c:otherwise>Private</c:otherwise> </c:choose> </tr> </table>
The Controller: Business Logic publicclass GroupController implements Controller { protected Log log = LogFactory.getLog(getClass()); private GroupDAO groupDAO; publicvoid setGroupDAO(GroupDAO groupDAO) { this.groupDAO = groupDAO; } public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { Map<String, Object> model = new Hashtable<String, Object>(); model.put(“group”, this,groupDAO.find(request.getParameter(“id”))); returnnew ModelAndView(“groupView"); } }
Servlet Configuration <bean id="loginMapping“ class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="interceptors"> <list> <ref bean="loginInterceptor"/> </list> </property> <property name="mappings"> <props> <prop key="/login">loginController</prop> <prop key="/home">homeController</prop> <prop key="/group">groupController</prop> . . . </props> </property> </bean>
The Model: Data Access Objects private static final String INSERT_SQL = “insert into nponet.group ” + “(name, description, owner_profile_id, is_public) ” + “values (?, ?, ?, ?) ”; publicvoid insert(Group group) { SqlUpdate update = new SqlUpdate(dataSource, INSERT_SQL); update.declareParameter(new SqlParameter(Types.VARCHAR)); update.declareParameter(new SqlParameter(Types.VARCHAR)); update.declareParameter(new SqlParameter(Types.INTEGER)); update.declareParameter(new SqlParameter(Types.BOOLEAN)); update.compile(); Object[] parameters = new Object[] { group.getName(), group.getDescription(), group.getOwnerID(), group.getIsPublic() }; update.update(parameters); }
The Model: SQL Mapping Queries publicclass GroupMappingQuery extends MappingSqlQuery { public GroupMappingQuery(DataSource dataSource) { super.setDataSource(dataSource); } protected Object mapRow(ResultSet rs, int i) throws SQLException { Group group = new Group(); group.setDescription(rs.getString("description")); group.setId(rs.getInt("id")); group.setName(rs.getString("name")); group.setOwnerID(rs.getInt("owner_profile_id")); group.setOwnerName(rs.getString("owner_profile_name")); group.setOwnerEmail(rs.getString("owner_email")); group.setIsPublic(rs.getBoolean("is_public")); group.setMemberCount(rs.getInt("members")); group.setImageID(rs.getInt("image_id")); return group; } }
Temporal Analytics • NPOnet tracks every action that occurs within the system. • NPOnet stores these actions in histories that take place over time.
Future Work • Administrative Tools • Extensible Architecture: blogs, wikis, instant messaging, more analysis • Estimated Cost: 600 hours for NPOnet at $50/hr is $30,000 • Grant Opportunities • Summer Internships
Thanks to the Center for Nonprofit Management for making NPOnet possible.