package de.twenty11.skysail.server.ext.notes.resources;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.restlet.data.Form;
import org.restlet.resource.Get;
import org.restlet.resource.ResourceException;
import de.twenty11.skysail.common.Presentation;
import de.twenty11.skysail.common.PresentationStyle;
import de.twenty11.skysail.common.navigation.LinkedPage;
import de.twenty11.skysail.common.responses.SkysailResponse;
import de.twenty11.skysail.server.core.restlet.ListServerResource2;
import de.twenty11.skysail.server.ext.notes.NotesApplication;
import de.twenty11.skysail.server.ext.notes.domain.Component;
import de.twenty11.skysail.server.ext.notes.domain.Folder;
import de.twenty11.skysail.server.ext.notes.domain.Note;
import de.twenty11.skysail.server.ext.notes.repos.ComponentRepository;
/**
* Restlet Root Resource for dbViewer application.
*
*/
@Presentation(preferred = PresentationStyle.LIST2)
public class NotesRootResource extends ListServerResource2<Component> {
public NotesRootResource() {
setName("osgimonitor root resource");
setDescription("The root resource of the osgimonitor application");
}
@Override
protected void doInit() throws ResourceException {
super.doInit();
}
@Override
@Get("html|json|csv")
public SkysailResponse<List<Component>> getEntities() {
registerLinkedPage(new LinkedPage() {
@Override
public String getLinkText() {
return "new Folder";
}
@Override
public String getHref() {
return "notes" + NotesApplication.FOLDERS_FORM_PATH;
}
@Override
public boolean applicable() {
return true;
}
});
registerLinkedPage(new LinkedPage() {
@Override
public String getLinkText() {
return "new Note";
}
@Override
public String getHref() {
return "notes/notes?media=htmlform";
}
@Override
public boolean applicable() {
return true;
}
});
registerLinkedPage(new LinkedPage() {
@Override
public String getLinkText() {
return "Notes";
}
@Override
public String getHref() {
return "notes/notes";
}
@Override
public boolean applicable() {
return true;
}
});
registerLinkedPage(new LinkedPage() {
@Override
public String getLinkText() {
return "Folders";
}
@Override
public String getHref() {
return "notes/folders";
}
@Override
public boolean applicable() {
return true;
}
});
return getEntities("Folders and Notes");
}
@Override
protected List<Component> getData() {
NotesApplication app = (NotesApplication) getApplication();
List<Component> result = new ArrayList<Component>();
addFolders(result, app);
addNotes(result, app);
return result;
}
private void addFolders(List<Component> result, NotesApplication app) {
ComponentRepository<Folder> folderRepository = app.getFolderRepository();
List<Folder> folders = folderRepository.getComponents();
Collections.sort(folders);
for (Folder folder : folders) {
result.add(folder);
}
}
private void addNotes(List<Component> result, NotesApplication app) {
ComponentRepository<Note> notesRepository = app.getNotesRepository();
List<Note> notes = notesRepository.getComponents();
// Collections.sort(notes);
for (Note note : notes) {
result.add(note);
}
}
@Override
public Component getData(Form form) {
// TODO Auto-generated method stub
return null;
}
@Override
public SkysailResponse<?> addEntity(Component entity) {
// TODO Auto-generated method stub
return null;
}
}