package org.docear.plugin.services.features.documentretrieval.model; import java.util.Iterator; import javax.swing.event.TreeModelListener; import org.docear.plugin.services.ServiceController; import org.docear.plugin.services.features.documentretrieval.DocumentRetrievalController; import org.docear.plugin.services.features.documentretrieval.documentsearch.DocumentSearchController; import org.docear.plugin.services.features.documentretrieval.documentsearch.view.DocumentSearchView; import org.freeplane.core.util.TextUtils; public class DocumentsModel { private DocumentModelNode rootNode; private String evaluationLabel = ""; private int id = 0; public DocumentsModel(DocumentEntries documentEntries) { new DocumentsModel(); parseRecommendations(documentEntries); } public DocumentsModel() { } private void parseRecommendations(DocumentEntries documentEntries) { if(documentEntries == null || documentEntries.getDocumentEntries().size()==0) { if(ServiceController.getCurrentUser().isRecommendationsEnabled()) { if (DocumentRetrievalController.getView() != null && DocumentRetrievalController.getView() instanceof DocumentSearchView) { if (DocumentSearchController.getController().getQuery().trim().length() == 0) { setRoot(DocumentModelNode.createNoRecommendationsNode(TextUtils.getText("documentsearch.error.no_search_terms"))); } else { setRoot(DocumentModelNode.createNoRecommendationsNode(TextUtils.getText("documentsearch.error.no_search_documents"))); } } else { setRoot(DocumentModelNode.createNoRecommendationsNode(TextUtils.getText("recommendations.error.no_recommendations"))); } } else { setRoot(DocumentModelNode.createNoServiceNode()); } return; } Iterator<DocumentEntry> entries = documentEntries.getDocumentEntries().iterator(); // small hack: first element in collection is xml-element "recommendations" DocumentEntry recommendationsElement = entries.next(); String rootTitle = recommendationsElement.getTitle(); evaluationLabel = recommendationsElement.getEvaluationLabel(); id = recommendationsElement.getSetId(); if (rootTitle != null && rootTitle.trim().length() > 0) { setRoot(DocumentModelNode.createRecommendationContainerNode(rootTitle)); } else { //fallback to standard title setRoot(DocumentModelNode.createRecommendationContainerNode()); } if(documentEntries.getDocumentEntries().isEmpty()) { if (DocumentRetrievalController.getView() != null && DocumentRetrievalController.getView() instanceof DocumentSearchView) { getRootNode().insert(DocumentModelNode.createNoRecommendationsNode(TextUtils.getText("documentsearch.error.no_search_terms"))); } else { getRootNode().insert(DocumentModelNode.createNoRecommendationsNode(TextUtils.getText("recommendations.error.no_recommendations"))); } } else { while (entries.hasNext()) { getRootNode().insert(DocumentModelNode.createRecommendationEntryNode(entries.next())); } } } public String getTitle() { String label = ServiceController.getCurrentUser().getName(); if(label != null && label.trim().length() > 0) { return TextUtils.format("recommendations.map.label.forUser", label); } return TextUtils.getText("recommendations.map.label.anonymous"); } public String getEvaluationLabel() { return evaluationLabel ; } public void setRoot(DocumentModelNode root) { this.rootNode = root; } public void addTreeModelListener(TreeModelListener l) { } public void removeTreeModelListener(TreeModelListener l) { // TODO Auto-generated method stub } public DocumentModelNode getChild(DocumentModelNode parent, int index) { if(parent == null) { return null; } return parent.getChildAt(index); } public int getChildCount(DocumentModelNode parent) { if(parent == null) { return 0; } return parent.getChildCount(); } public DocumentModelNode getRootNode() { return this.rootNode; } public boolean isLeaf(DocumentModelNode node) { if(node == null) { return true; } return node.isLeaf(); } public int getIndexOfChild(DocumentModelNode parent, DocumentModelNode child) { if(parent == null) { return -1; } return parent.getIndex(child); } public int getSetId() { return id; } }