Summary
Project |
DSpace ClientUI built on RESTful API |
Student |
|
Mentors |
|
Technologies |
DSpace REST |
Proposal |
|
Location for project |
|
Notes |
Requirements
- Client run interface
- Attractive look and feel
- Easy to customize
Functional Specifications
Features to be supported
- Respository Browsing
- Repository Manipulation
- Content Searching
- Statistics
- Administration
Customizations to be supported
- Stylesheets (CSS)
- Layout
- Themes
- Internationalization
Project Timeline
|
Ready |
|
Base done, Improvement phase |
|
In Progress |
Before May 24
- Obtain access to :
Wiki
Project repository
Download, build and install local DSpace instance
Download, build and install DSpace REST module
Test and verify the installation
Go through the functionality of DSpace and DSpace REST API
Compare possible JavaScript UI frameworks -- Ext JS preferred
Mark: I would like to see a bit more dialog with Bojan concerning the REST API contracts and migration to Spring, mainly, are we happy with these API contracts and using them for the students project, or do we need to consider some possible changes int he API to adopt to using Spring REST instead of Entity Broker. And if so, is there a timeline for providing those changes in scope of the 1.8 release?
Vibhaj: Confirmed that the possible migration shall not affect the REST interface and hence RestClient project.
May 25 - June 15
Get familiar with DSpace REST API
- collections, communities, items and bitstreams
- create
view
- edit
- delete
- users and groups
view
- search
- generating statistics
- collections, communities, items and bitstreams
Decide the JavaScript Library to be used by discussing with the DSpace community: jQuery [decided by community]
Learn the jQuery JavaScript Library
Selectors
Actions and Methods
Events
UI Widgets
Design architecture for client run ServiceClient supported by RESTful (JSON) services
Design generic Views, Renderers, Templates and Modules for ServiceClient
Plan these extensions for RestClient
RESTLoad Navigator
ParseItemMetadata helper
June 15 - June 30
Implement extensions (Modules and Templates) to ServiceClient in RESTClient to provide support for :
- Repository Browsing
- Communities
All
Single
Subcommunities
Recent Submissions
- Sort
- Collections
All
Single
- Sort
- Items
All
Single
- Bitstreams
Download
- Communities
- Repository Manupulation
- Communities
- Collections
- Items
- Content Searching
- Administration
- Users
Login
- All
- Single
- Edit
- Groups
- All
- Single
- Edit
- Users
- Statistics
- Reports
- Charts and Visualization
- Repository Browsing
July 01 - July 15
- Testing
- Partial documentation
- GSoC Mid Term Evaluations
July 16 - July 31
- Enhancing the look and feel
- Look into and improve scope for customizations
- Stylesheets (CSS)
- Layout
- Themes
- Internationalization (jQuery support required)
- Improve the architecture of RESTClient and ServiceClient
Timeline shall be completed as project progresses ...
Recent Screenshots
Issues / Problems
1. [ 04 Jun 2011 ] I am not getting the community logo using the URL /communities/{id}/logo
Solved : /bitstream/{community.logo.id}/receive
2. [ 05 Jun 2011 ] While working with REST module, I found that after making many requests while testing for some time, I get the following exception and then the module does not give correct results for further requests. Kindly look into the issue and inform me if the error is occurring due to some mistake from my side.
org.postgresql.util.PSQLException: This statement has been closed. at org.postgresql.jdbc2.AbstractJdbc2Statement.checkClosed(AbstractJdbc2Statement.java:2424) at org.postgresql.jdbc2.AbstractJdbc2Statement.setInt(AbstractJdbc2Statement.java:1147) at org.apache.commons.dbcp.DelegatingPreparedStatement.setInt(DelegatingPreparedStatement.java:120) at org.apache.commons.dbcp.DelegatingPreparedStatement.setInt(DelegatingPreparedStatement.java:120) at org.apache.commons.dbcp.DelegatingPreparedStatement.setInt(DelegatingPreparedStatement.java:120) at org.dspace.storage.rdbms.DatabaseManager.loadParameters(DatabaseManager.java:1558) at org.dspace.storage.rdbms.DatabaseManager.queryTable(DatabaseManager.java:223) at org.dspace.storage.rdbms.DatabaseManager.querySingleTable(DatabaseManager.java:366) at org.dspace.storage.rdbms.DatabaseManager.findByUnique(DatabaseManager.java:514) at org.dspace.storage.rdbms.DatabaseManager.find(DatabaseManager.java:476) at org.dspace.eperson.Group.find(Group.java:684) at org.dspace.content.Collection.groupFromColumn(Collection.java:1315) at org.dspace.content.Collection.<init>(Collection.java:134) at org.dspace.content.Collection.findAll(Collection.java:319) at org.dspace.rest.providers.CollectionsProvider.getEntities(CollectionsProvider.java:229) at org.sakaiproject.entitybus.impl.EntityBrokerManagerImpl.internalGetEntities(EntityBrokerManagerImpl.java:550) at org.sakaiproject.entitybus.impl.EntityBrokerManagerImpl.getEntitiesData(EntityBrokerManagerImpl.java:402) at org.sakaiproject.entitybus.rest.EntityHandlerImpl.handleEntityAccess(EntityHandlerImpl.java:563) at org.sakaiproject.entitybus.util.servlet.DirectServlet.dispatch(DirectServlet.java:186) at org.sakaiproject.entitybus.util.servlet.DirectServlet.handleRequest(DirectServlet.java:157) at org.sakaiproject.entitybus.util.servlet.DirectServlet.service(DirectServlet.java:130) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:306) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:323) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1719) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) INFO: EntityEncodingManager: No entities to format (json) and output for ref (/collections) WARN Could not process entity: /collections/2 (404)[null]: Attempted to access an entity URL path (/collections/2.json) for an entity (/collections/2) that does not exist