Search in sources :

Example 1 with UserNameNode

use of cbit.vcell.desktop.BioModelNode.UserNameNode in project vcell by virtualcell.

the class MathModelCellRenderer method getTreeCellRendererComponent.

/**
 * Insert the method's description here.
 * Creation date: (7/27/2000 6:41:57 PM)
 * @return java.awt.Component
 */
public java.awt.Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
    JLabel component = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
    // 
    try {
        if (value instanceof UserNameNode) {
            UserNameNode node = (UserNameNode) value;
            String label = (String) node.getUserObject();
            String qualifier = "";
            if (sessionUser != null && sessionUser.getName().contentEquals(label)) {
                String colorString = (sel) ? "white" : "#8B0000";
                qualifier = "<font color=\"" + colorString + "\"><b>" + label + "</b></font>";
            } else {
                String colorString = (sel) ? "white" : "black";
                qualifier = "<font color=\"" + colorString + "\">" + label + "</font>";
            }
            component.setToolTipText(label);
            component.setText("<html>" + qualifier + " (" + node.getChildCount() + ")" + "</html>");
            component.setIcon(fieldFolderUserIcon);
        } else if (value instanceof PublicationInfoNode) {
            BioModelNode node = (PublicationInfoNode) value;
            PublicationInfo pi = (PublicationInfo) node.getUserObject();
            String label = pi.getTitle();
            String name = "";
            if (pi.getAuthors() != null && pi.getAuthors().length > 0) {
                name = pi.getAuthors()[0];
            }
            if (name.contains(",")) {
                name = name.substring(0, name.indexOf(","));
            }
            int year = Integer.parseInt((new SimpleDateFormat("yyyy")).format(pi.getPubDate()));
            String label2 = name + " " + year + " " + label;
            int maxLen = MaxPublicationLabelLength + (node.getChildCount() > 1 ? 0 : 4);
            if (label2.length() > maxLen) {
                label2 = label2.substring(0, maxLen) + "...";
            }
            if (node.getChildCount() > 1) {
                String prefix = sel ? "" : "<span style=\"color:#8B0000\">";
                String suffix = sel ? "" : "</span>";
                label += prefix + " (" + node.getChildCount() + ")" + suffix;
                label2 += prefix + " (" + node.getChildCount() + ")" + suffix;
            }
            component.setText("<html>" + label2 + "</html>");
            component.setToolTipText("<html>" + label + "</html>");
            if (pi.getPubDate().compareTo(Calendar.getInstance().getTime()) > 0) {
                // sanity check
                setIcon(fieldFolderWarningIcon);
            } else if (pi.getDoi() == null) {
                setIcon(fieldFolderWarningIcon);
            } else if (name.contains(" ")) {
                setIcon(fieldFolderWarningIcon);
            } else {
                // publications have their own icon
                setIcon(fieldPublishedPublicationIcon);
            }
        } else if (value instanceof BioModelNode) {
            BioModelNode node = (BioModelNode) value;
            Object userObject = node.getUserObject();
            if (userObject instanceof User) {
                String label = null;
                if (sessionUser != null && sessionUser.compareEqual((User) userObject)) {
                    label = "My MathModels (" + ((User) userObject).getName() + ") (" + node.getChildCount() + ")";
                } else {
                    label = ((User) userObject).getName() + "                             ";
                }
                component.setToolTipText(label);
                component.setText(label);
            } else if (userObject instanceof MathModelInfo) {
                // a math model version
                MathModelInfo mathModelInfo = (MathModelInfo) userObject;
                if (mathModelInfo.getPublicationInfos() != null && mathModelInfo.getPublicationInfos().length > 0) {
                    if (mathModelInfo.getVersion().getFlag().compareEqual(org.vcell.util.document.VersionFlag.Published)) {
                        component.setText("(Published) " + component.getText());
                    } else {
                        component.setText("(Curated) " + component.getText());
                    }
                } else if (mathModelInfo.getVersion().getFlag().compareEqual(org.vcell.util.document.VersionFlag.Archived)) {
                    component.setText("(Archived) " + component.getText());
                }
                String str = component.getToolTipText();
                if (str != null && !str.isEmpty()) {
                    component.setToolTipText(str + " " + mathModelInfo.getVersion().getVersionKey());
                }
                // we change color of version if it's in the Other folder (Uncurated) and belongs to login user
                Object pNode = node.getParent();
                if (pNode instanceof BioModelNode) {
                    pNode = ((BioModelNode) pNode).getParent();
                    if (pNode instanceof BioModelNode && ((BioModelNode) pNode).getUserObject() instanceof String) {
                        str = (String) ((BioModelNode) pNode).getUserObject();
                        pNode = ((BioModelNode) pNode).getParent();
                        if (((BioModelNode) pNode).getUserObject() instanceof String && str.equalsIgnoreCase(sessionUser.getName())) {
                            str = (String) ((BioModelNode) pNode).getUserObject();
                            if (str.equals(VCDocumentDbTreeModel.Other_MathModels)) {
                                // GRAY
                                String prefix = sel ? "" : "<span style=\"color:#808080\">";
                                String suffix = sel ? "" : "</span>";
                                String str1 = prefix + component.getText() + suffix;
                                setText("<html>" + str1 + "</html>");
                            }
                        }
                    }
                }
            } else if (userObject instanceof VCDocumentInfoNode) {
                VCDocumentInfoNode infonode = (VCDocumentInfoNode) userObject;
                User nodeUser = infonode.getVCDocumentInfo().getVersion().getOwner();
                String modelName = infonode.getVCDocumentInfo().getVersion().getName();
                String username = nodeUser.getName();
                if (username.equals(VCDocumentDbTreeModel.USER_tutorial)) // || username.equals(VCDocumentDbTreeModel.USER_Education)
                {
                    if (node.getParent() instanceof BioModelNode && ((BioModelNode) node.getParent()).getUserObject() instanceof String) {
                        String pName = (String) ((BioModelNode) node.getParent()).getUserObject();
                        if (pName.equals(VCDocumentDbTreeModel.Curated_MathModels)) {
                            // we add the user name to Curated
                            setText("<html><b>" + nodeUser.getName() + " </b> : " + modelName + "</html>");
                        } else {
                            // keep it simple for Education and Tutorial
                            component.setText(modelName);
                        }
                    } else {
                        component.setText(modelName);
                    }
                } else if (nodeUser.compareEqual(sessionUser)) {
                    Object pNode = node.getParent();
                    if (pNode instanceof BioModelNode) {
                        BioModelNode parent = (BioModelNode) pNode;
                        if (parent.getUserObject() instanceof String) {
                            // the Published, Curated and Other folders are the only
                            // ones where the parent user object is a String
                            String str = (String) parent.getUserObject();
                            if (str.equals(VCDocumentDbTreeModel.Published_MathModels) || str.equals(VCDocumentDbTreeModel.Curated_MathModels)) /*|| str.equals(VCDocumentDbTreeModel.Other_MathModels)*/
                            {
                                String prefix = sel ? "" : "<span style=\"color:#8B0000\">";
                                String suffix = sel ? "" : "</span>";
                                setText("<html><b>" + prefix + nodeUser.getName() + suffix + "</b>  : " + modelName + "</html>");
                            } else {
                                // in the Other folder / owner folder
                                // GRAY
                                String prefix = sel ? "" : "<span style=\"color:#808080\">";
                                String suffix = sel ? "" : "</span>";
                                String str1 = prefix + modelName + suffix;
                                if (node.getChildCount() > 1) {
                                    prefix = sel ? "" : "<span style=\"color:#8B0000\">";
                                    suffix = sel ? "" : "</span>";
                                    str1 += prefix + " (" + node.getChildCount() + ")" + suffix;
                                }
                                // the name of the model container - which holds the versions
                                setText("<html>" + str1 + "</html>");
                            }
                        } else if (parent.getUserObject() instanceof PublicationInfo) {
                            String prefix = sel ? "" : "<span style=\"color:#8B0000\">";
                            String suffix = sel ? "" : "</span>";
                            setText("<html><b>" + prefix + nodeUser.getName() + suffix + "</b>  : " + modelName + "</html>");
                        } else {
                            String str = modelName;
                            if (node.getChildCount() > 1) {
                                String prefix = sel ? "" : "<span style=\"color:#8B0000\">";
                                String suffix = sel ? "" : "</span>";
                                str += prefix + " (" + node.getChildCount() + ")" + suffix;
                            }
                            setText("<html>" + str + "</html>");
                        }
                    } else {
                        // unreachable
                        setText(modelName);
                    }
                } else {
                    Object pNode = node.getParent();
                    if (pNode instanceof UserNameNode) {
                        // if we are inside an UserName folder (like Shared or Uncurated public),
                        // don't prefix again the model with the user name
                        String str = modelName;
                        if (node.getChildCount() > 1) {
                            String prefix = sel ? "" : "<span style=\"color:#8B0000\">";
                            String suffix = sel ? "" : "</span>";
                            str += prefix + " (" + node.getChildCount() + ")" + suffix;
                        }
                        setText("<html>" + str + "</html>");
                    } else {
                        // content of "Published" folder
                        setText("<html><b>" + nodeUser.getName() + " </b> : " + modelName + "</html>");
                    }
                }
            }
        }
    } catch (Throwable e) {
        e.printStackTrace(System.out);
    }
    // 
    if (component.getToolTipText() == null || component.getToolTipText().length() == 0) {
        component.setToolTipText(component.getText());
    }
    return component;
}
Also used : UserNameNode(cbit.vcell.desktop.BioModelNode.UserNameNode) User(org.vcell.util.document.User) PublicationInfo(org.vcell.util.document.PublicationInfo) JLabel(javax.swing.JLabel) MathModelInfo(org.vcell.util.document.MathModelInfo) SimpleDateFormat(java.text.SimpleDateFormat) PublicationInfoNode(cbit.vcell.desktop.BioModelNode.PublicationInfoNode)

Example 2 with UserNameNode

use of cbit.vcell.desktop.BioModelNode.UserNameNode in project vcell by virtualcell.

the class VCDocumentDbTreeModel method initFinalTree.

protected static synchronized void initFinalTree(VCDocumentDbTreeModel vcDocumentDbTreeModel, TreeMap<String, BioModelNode> treeMap, User loginUser) {
    BioModelNode ownerNode = (BioModelNode) treeMap.get(loginUser.getName());
    BioModelNode tempNode = new BioModelNode();
    vcDocumentDbTreeModel.myModelsNode.setUserObject(loginUser);
    vcDocumentDbTreeModel.myModelsNode.removeAllChildren();
    for (int c = 0; c < ownerNode.getChildCount(); ) {
        // c stays zero, during each iteration we keep extracting the first element
        BioModelNode childNode = (BioModelNode) ownerNode.getChildAt(c);
        // VCDocumentInfoNode vcdDocumentInfoNode = (VCDocumentInfoNode) childNode.getUserObject();
        // System.out.println(vcdDocumentInfoNode.getVCDocumentInfo().getVersion().getName());
        BioModelNode cloneNode = childNode.clone();
        // this slowly empties ownerNode
        vcDocumentDbTreeModel.myModelsNode.add(childNode);
        boolean isPublic = false;
        for (int i = 0; i < childNode.getChildCount(); i++) {
            BioModelNode versionBioModelNode = (BioModelNode) childNode.getChildAt(i);
            VCDocumentInfo versionVCDocumentInfo = (VCDocumentInfo) versionBioModelNode.getUserObject();
            BigDecimal groupid = versionVCDocumentInfo.getVersion().getGroupAccess().getGroupid();
            if (groupid.equals(GroupAccess.GROUPACCESS_ALL)) {
                isPublic = true;
            }
        // use the form below if want to populate the Other folder with my Public models
        // if (groupid.equals(GroupAccess.GROUPACCESS_ALL)) {
        // use the form below to populate only the Published folder with my Published models
        // if(	versionVCDocumentInfo.getPublicationInfos() != null && versionVCDocumentInfo.getPublicationInfos().length > 0) {
        // BioModelNode versionCloneNode = versionBioModelNode.clone();
        // cloneNode.add(versionCloneNode);
        // }
        }
        if (isPublic) {
            BioModelNode publicClone = BioModelNode.deepClone(childNode);
            // we add all login user models that have at least one public version
            tempNode.add(publicClone);
        }
    // if(cloneNode.getChildCount() > 0) {
    // tempNode.add(cloneNode);					// we keep adding only the clones of the public versions (if any) to the cloneNode
    // }
    // ownerNode gets empty eventually
    }
    for (int c = 0; c < tempNode.getChildCount(); ) {
        // we put back in ownerNode the clone nodes with public versions
        BioModelNode childNode = (BioModelNode) tempNode.getChildAt(c);
        ownerNode.add(childNode);
    }
    // key is publicationKey, value is the list of model nodes associated with the PublicationInfo object
    LinkedHashMap<KeyValue, LinkedList<BioModelNode>> publishedModelsMap = new LinkedHashMap<>();
    LinkedHashMap<KeyValue, LinkedList<BioModelNode>> curatedModelsMap = new LinkedHashMap<>();
    // key is publicationKey, value is a PublicationInfo instance associated to the DOI
    LinkedHashMap<KeyValue, PublicationInfo> publicationsMap = new LinkedHashMap<>();
    vcDocumentDbTreeModel.sharedModelsNode.removeAllChildren();
    boolean bTutorial = vcDocumentDbTreeModel.tutorialModelsNode != null;
    // boolean bEducation = vcDocumentDbTreeModel.educationModelsNode != null;
    boolean bModelBricks = vcDocumentDbTreeModel.modelBricksNode != null;
    boolean bPublished = vcDocumentDbTreeModel.publishedModelsNode != null;
    boolean bCurated = vcDocumentDbTreeModel.curatedModelsNode != null;
    boolean bOther = vcDocumentDbTreeModel.otherModelsNode != null;
    if (bTutorial) {
        vcDocumentDbTreeModel.tutorialModelsNode.removeAllChildren();
    }
    // if(bEducation){vcDocumentDbTreeModel.educationModelsNode.removeAllChildren();}
    if (bModelBricks) {
        vcDocumentDbTreeModel.modelBricksNode.removeAllChildren();
    }
    if (bPublished) {
        vcDocumentDbTreeModel.publishedModelsNode.removeAllChildren();
    }
    if (bCurated) {
        vcDocumentDbTreeModel.curatedModelsNode.removeAllChildren();
    }
    if (bOther) {
        vcDocumentDbTreeModel.otherModelsNode.removeAllChildren();
    }
    for (String username : treeMap.keySet()) {
        // iterate through all users
        // if(username.equals(USER_modelBricks)) {
        // System.out.print(username);
        // System.out.println();
        // }
        BioModelNode userNode = treeMap.get(username);
        // initialize to something
        BioModelNode parentNode = vcDocumentDbTreeModel.sharedModelsNode;
        boolean bSpecificUser = true;
        if ((username.equals(USER_tutorial) || username.equals(USER_tutorial610) || username.equals(USER_tutorial611)) && bTutorial) {
            parentNode = vcDocumentDbTreeModel.tutorialModelsNode;
        // } else if (username.equals(USER_Education) && bEducation) {
        // parentNode = vcDocumentDbTreeModel.educationModelsNode;
        } else if (username.equals(USER_modelBricks) && bModelBricks) {
            parentNode = vcDocumentDbTreeModel.modelBricksNode;
        } else {
            bSpecificUser = false;
        }
        boolean added = false;
        UserNameNode userNameNode = new UserNameNode(username, true);
        for (int c = 0; c < userNode.getChildCount(); c++) {
            // we just navigate through all of them, remove none
            BioModelNode childNode = (BioModelNode) userNode.getChildAt(c);
            // --------------------------------------------- 'other' public folder ---------------------------------------
            if (!bSpecificUser) {
                // if(username.equalsIgnoreCase(loginUser.getName())) {
                // break;			// TODO: we skip login user from now because it needs real time recalculation
                // }
                parentNode = vcDocumentDbTreeModel.otherModelsNode;
                BioModelNode cloneNode = childNode.clone();
                for (int i = 0; i < childNode.getChildCount(); i++) {
                    BioModelNode versionBioModelNode = (BioModelNode) childNode.getChildAt(i);
                    VCDocumentInfo versionVCDocumentInfo = (VCDocumentInfo) versionBioModelNode.getUserObject();
                    BigDecimal groupid = versionVCDocumentInfo.getVersion().getGroupAccess().getGroupid();
                    if (groupid.equals(GroupAccess.GROUPACCESS_ALL)) {
                        if (versionVCDocumentInfo.getPublicationInfos() != null && versionVCDocumentInfo.getPublicationInfos().length > 0) {
                            // we don't show in "Other" anything that is published or curated
                            continue;
                        }
                        // clone the public versions
                        BioModelNode versionCloneNode = versionBioModelNode.clone();
                        // and add them to the clone node
                        cloneNode.add(versionCloneNode);
                    }
                }
                if (cloneNode.getChildCount() > 0) {
                    // we keep adding only the clones of the public versions (if any) to the cloneNode
                    userNameNode.add(cloneNode);
                    if (added == false) {
                        parentNode.add(userNameNode);
                        added = true;
                    }
                }
            } else {
                // anything belonging to users Education, Tutorial or modelBricks go to their own folders
                if (username.equals(USER_modelBricks)) {
                    // revision feb 13, 2020 danv
                    // for modelBricks, only the public clones go the Model Bricks folder
                    // we'll enforce a single version policy so that we won't have to look into versions to see
                    // the individual flag of each
                    VCDocumentInfoNode vcdDocumentInfoNode = (VCDocumentInfoNode) childNode.getUserObject();
                    BigDecimal groupid = vcdDocumentInfoNode.getVCDocumentInfo().getVersion().getGroupAccess().getGroupid();
                    // BigDecimal groupid = versionVCDocumentInfo.getVersion().getGroupAccess().getGroupid();
                    if (groupid.equals(GroupAccess.GROUPACCESS_ALL)) {
                        // only the public bricks go here
                        BioModelNode clone = BioModelNode.deepClone(childNode);
                        parentNode.add(clone);
                    }
                } else {
                    // for all the other special users we keep the old behavior
                    BioModelNode clone = BioModelNode.deepClone(childNode);
                    parentNode.add(clone);
                }
            }
        }
        // -------------------------------------------- shared folder -----------------------------------------------
        added = false;
        userNameNode = new UserNameNode(username, true);
        for (int c = 0; c < userNode.getChildCount(); c++) {
            // we just navigate through all of them, remove none
            if (username.equalsIgnoreCase(loginUser.getName())) {
                // the login user can't share with himself
                break;
            }
            BioModelNode childNode = (BioModelNode) userNode.getChildAt(c);
            if (!bSpecificUser) {
                parentNode = vcDocumentDbTreeModel.sharedModelsNode;
                BioModelNode cloneNode = childNode.clone();
                for (int i = 0; i < childNode.getChildCount(); i++) {
                    BioModelNode versionBioModelNode = (BioModelNode) childNode.getChildAt(i);
                    VCDocumentInfo versionVCDocumentInfo = (VCDocumentInfo) versionBioModelNode.getUserObject();
                    BigDecimal groupid = versionVCDocumentInfo.getVersion().getGroupAccess().getGroupid();
                    // System.out.println("    " + groupid);
                    if (groupid.equals(GroupAccess.GROUPACCESS_ALL) || groupid.equals(GroupAccess.GROUPACCESS_NONE)) {
                        // we skip private and public versions (that includes published versions)
                        continue;
                    }
                    // clone the shared versions
                    BioModelNode versionCloneNode = versionBioModelNode.clone();
                    // and add them to the clone node
                    cloneNode.add(versionCloneNode);
                }
                if (cloneNode.getChildCount() > 0) {
                    // we keep adding only the clones of the shared versions (if any) to the cloneNode
                    userNameNode.add(cloneNode);
                    if (added == false) {
                        // now that we know for sure that the user name node is populated, we add it to the shared node if it's not there already
                        parentNode.add(userNameNode);
                        added = true;
                    }
                }
            } else {
                if (username.equals(USER_modelBricks)) {
                    // revision feb 13, 2020 danv
                    // for modelBricks, we make a user name node and we populate it with all the bricks shared with
                    // the login user
                    // we'll enforce a single version policy so that we won't have to look into versions to see
                    // the individual flag of each
                    parentNode = vcDocumentDbTreeModel.sharedModelsNode;
                    VCDocumentInfoNode vcdDocumentInfoNode = (VCDocumentInfoNode) childNode.getUserObject();
                    BigDecimal groupid = vcdDocumentInfoNode.getVCDocumentInfo().getVersion().getGroupAccess().getGroupid();
                    if (groupid.equals(GroupAccess.GROUPACCESS_ALL) || groupid.equals(GroupAccess.GROUPACCESS_NONE)) {
                        // nothing to do here with public or private bricks
                        ;
                    } else {
                        BioModelNode cloneNode = BioModelNode.deepClone(childNode);
                        userNameNode.add(cloneNode);
                        if (added == false) {
                            // now that we know for sure that the user name node is populated, we add it to the shared node if it's not there already
                            parentNode.add(userNameNode);
                            added = true;
                        }
                    }
                }
            }
        }
        for (int c = 0; c < userNode.getChildCount(); ) {
            BioModelNode versionableNode = (BioModelNode) userNode.getChildAt(c);
            // Search through versions of BM/MM to see if any are published
            for (int i = 0; i < versionableNode.getChildCount(); ) {
                // the versions
                BioModelNode versionBioModelNode = (BioModelNode) versionableNode.getChildAt(i);
                VCDocumentInfo versionVCDocumentInfo = (VCDocumentInfo) versionBioModelNode.getUserObject();
                PublicationInfo[] piArray = versionVCDocumentInfo.getPublicationInfos();
                if (piArray != null && piArray.length > 0) {
                    // we already placed this version in Curated, no need to look for more publications for curated
                    boolean foundCurated = false;
                    // same as above for published
                    boolean foundPublished = false;
                    for (PublicationInfo pi : piArray) {
                        KeyValue key = pi.getPublicationKey();
                        if (!publicationsMap.containsKey(key)) {
                            publicationsMap.put(key, pi);
                        }
                        if (versionVCDocumentInfo.getVersion().getFlag().compareEqual(org.vcell.util.document.VersionFlag.Published)) {
                            // published
                            if (foundPublished) {
                                continue;
                            }
                            // String vn = versionVCDocumentInfo.getVersion().getName();
                            // String vo = versionVCDocumentInfo.getVersion().getOwner().getName();
                            // String vk = versionVCDocumentInfo.getVersion().getVersionKey().toString();
                            // System.out.println(vk);
                            LinkedList<BioModelNode> modelsList;
                            if (publishedModelsMap.containsKey(key)) {
                                modelsList = publishedModelsMap.get(key);
                            } else {
                                modelsList = new LinkedList<>();
                            }
                            BioModelNode newPublishedNode = new BioModelNode(new VCDocumentInfoNode(versionVCDocumentInfo), true);
                            BioModelNode clonedNode = versionBioModelNode.clone();
                            newPublishedNode.add(clonedNode);
                            modelsList.add(newPublishedNode);
                            publishedModelsMap.put(key, modelsList);
                            foundPublished = true;
                        } else {
                            // curated
                            if (foundCurated) {
                                // otherwise we may add the same version multiple times to Curated, once for each PublicationInfo
                                continue;
                            }
                            // the code below shows by author + model name
                            BioModelNode newCuratedNode = new BioModelNode(new VCDocumentInfoNode(versionVCDocumentInfo), true);
                            BioModelNode clonedNode = versionBioModelNode.clone();
                            newCuratedNode.add(clonedNode);
                            vcDocumentDbTreeModel.curatedModelsNode.add(newCuratedNode);
                            // the code below shows by Publication Title
                            // LinkedList<BioModelNode> modelsList;
                            // if(curatedModelsMap.containsKey(key)) {
                            // modelsList = curatedModelsMap.get(key);
                            // } else {
                            // modelsList = new LinkedList<> ();
                            // }
                            // BioModelNode newCuratedNode = new BioModelNode(new VCDocumentInfoNode(versionVCDocumentInfo), true);
                            // BioModelNode clonedNode = versionBioModelNode.clone();
                            // newCuratedNode.add(clonedNode);
                            // modelsList.add(newCuratedNode);
                            // curatedModelsMap.put(key, modelsList);
                            foundCurated = true;
                        }
                    }
                }
                versionableNode.remove(i);
            }
            userNode.remove(c);
        }
    }
    shallowOrderByPublication(publishedModelsMap, publicationsMap);
    for (KeyValue key : publishedModelsMap.keySet()) {
        LinkedList<BioModelNode> modelsList = publishedModelsMap.get(key);
        PublicationInfo pi = publicationsMap.get(key);
        BioModelNode newPublicationNode = new BioModelNode.PublicationInfoNode(pi, true);
        for (BioModelNode node : modelsList) {
            newPublicationNode.add(node);
        }
        vcDocumentDbTreeModel.publishedModelsNode.add(newPublicationNode);
    }
    // for (int c = 0; c < vcDocumentDbTreeModel.modelBricksNode.getChildCount(); c++) {
    if (bModelBricks) {
        for (int i = 0; i < vcDocumentDbTreeModel.modelBricksNode.getChildCount(); ) {
            BioModelNode childNode = (BioModelNode) vcDocumentDbTreeModel.modelBricksNode.getChildAt(0);
            vcDocumentDbTreeModel.curatedModelsNode.add(childNode);
        }
    }
}
Also used : UserNameNode(cbit.vcell.desktop.BioModelNode.UserNameNode) KeyValue(org.vcell.util.document.KeyValue) PublicationInfo(org.vcell.util.document.PublicationInfo) BigDecimal(java.math.BigDecimal) LinkedList(java.util.LinkedList) LinkedHashMap(java.util.LinkedHashMap) VCDocumentInfo(org.vcell.util.document.VCDocumentInfo) VCDocumentInfoNode(cbit.vcell.desktop.VCellBasicCellRenderer.VCDocumentInfoNode) PublicationInfoNode(cbit.vcell.desktop.BioModelNode.PublicationInfoNode)

Example 3 with UserNameNode

use of cbit.vcell.desktop.BioModelNode.UserNameNode in project vcell by virtualcell.

the class GeometryCellRenderer method getTreeCellRendererComponent.

/**
 * Insert the method's description here.
 * Creation date: (7/27/2000 6:41:57 PM)
 * @return java.awt.Component
 */
public java.awt.Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
    JLabel component = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
    // 
    try {
        if (value instanceof UserNameNode) {
            UserNameNode node = (UserNameNode) value;
            String label = (String) node.getUserObject();
            String qualifier = "";
            if (sessionUser != null && sessionUser.getName().contentEquals(label)) {
                String colorString = (sel) ? "white" : "#8B0000";
                qualifier = "<font color=\"" + colorString + "\">" + label + "</font>";
            } else {
                String colorString = (sel) ? "white" : "black";
                qualifier = "<font color=\"" + colorString + "\">" + label + "</font>";
            }
            component.setToolTipText(label);
            component.setText("<html>" + qualifier + " (" + node.getChildCount() + ")" + "</html>");
            component.setIcon(fieldFolderUserIcon);
        } else if (value instanceof BioModelNode) {
            BioModelNode node = (BioModelNode) value;
            Object userObject = node.getUserObject();
            if (userObject instanceof User) {
                String label = null;
                if (sessionUser != null && sessionUser.compareEqual((User) userObject)) {
                    label = "My Geometries (" + ((User) userObject).getName() + ") (" + node.getChildCount() + ")";
                } else {
                    label = ((User) userObject).getName() + "                              ";
                }
                component.setToolTipText(label);
                component.setText(label);
            } else if (userObject instanceof VCDocumentInfoNode) {
                VCDocumentInfoNode infonode = (VCDocumentInfoNode) userObject;
                User nodeUser = infonode.getVCDocumentInfo().getVersion().getOwner();
                String modelName = infonode.getVCDocumentInfo().getVersion().getName();
                if (nodeUser.compareEqual(sessionUser)) {
                    // in My Geometries we don't display the name, it's always me
                    setText(modelName);
                } else {
                    // for geometries we don't display the name (neither in Public, nor in Shared)
                    // use the code below if we actually need to display the user name too
                    // setText("<html><b>" + nodeUser.getName() + " </b> : " + modelName + "</html>");
                    setText(modelName);
                }
            }
        }
    } catch (Throwable e) {
        e.printStackTrace(System.out);
    }
    // 
    if (component.getToolTipText() == null || component.getToolTipText().length() == 0) {
        component.setToolTipText(component.getText());
    }
    return component;
}
Also used : UserNameNode(cbit.vcell.desktop.BioModelNode.UserNameNode) User(org.vcell.util.document.User) JLabel(javax.swing.JLabel)

Example 4 with UserNameNode

use of cbit.vcell.desktop.BioModelNode.UserNameNode in project vcell by virtualcell.

the class BioModelCellRenderer method getTreeCellRendererComponent.

/**
 * Insert the method's description here.
 * Creation date: (7/27/2000 6:41:57 PM)
 * @return java.awt.Component
 */
public java.awt.Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
    JLabel component = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
    // 
    try {
        if (value instanceof DateNode) {
            DateNode dateNode = (DateNode) value;
            AnnotationQualifier qualifier = dateNode.getDateQualifier();
            String colorString = (sel) ? "white" : "black";
            component.setText("<html>" + qualifier.getDescription() + "&nbsp;<font color=\"" + colorString + "\">" + dateNode.getDate().getDateString() + "</font></html>");
        } else if (value instanceof LinkNode) {
            LinkNode ln = (LinkNode) value;
            String link = ln.getLink();
            String text = ln.getText();
            MIRIAMQualifier mQualifier = ln.getMiriamQualifier();
            String qualifier = "";
            if (mQualifier.equals(MIRIAMQualifier.MODEL_isDescribedBy)) {
                String colorString = (sel) ? "white" : "black";
                qualifier = "<font color=\"" + colorString + "\">" + mQualifier.getDescription() + "</font>";
            } else {
                String colorString = (sel) ? "white" : "#8B0000";
                qualifier = "<font color=\"" + colorString + "\">" + mQualifier.getDescription() + "</font>";
            }
            if (link != null) {
                String colorString = (sel) ? "white" : "blue";
                component.setToolTipText("Double-click to open link");
                component.setText("<html>" + qualifier + "&nbsp;<font color=\"" + colorString + "\"><a href=" + link + ">" + text + "</a></font></html>");
            } else {
                String colorString = (sel) ? "white" : "black";
                component.setText("<html>" + qualifier + "&nbsp;<font color=\"" + colorString + "\">" + text + "</font></html>");
            }
        } else if (value instanceof PublicationInfoNode) {
            BioModelNode node = (PublicationInfoNode) value;
            PublicationInfo pi = (PublicationInfo) node.getUserObject();
            String label = pi.getTitle();
            String name = "";
            if (pi.getAuthors() != null && pi.getAuthors().length > 0) {
                name = pi.getAuthors()[0];
            }
            if (name.contains(",")) {
                name = name.substring(0, name.indexOf(","));
            }
            int year = Integer.parseInt((new SimpleDateFormat("yyyy")).format(pi.getPubDate()));
            String label2 = name + " " + year + " " + label;
            int maxLen = MaxPublicationLabelLength + (node.getChildCount() > 1 ? 0 : 4);
            if (label2.length() > maxLen) {
                label2 = label2.substring(0, maxLen) + "...";
            }
            if (node.getChildCount() > 1) {
                String prefix = sel ? "" : "<span style=\"color:#8B0000\">";
                String suffix = sel ? "" : "</span>";
                label += prefix + " (" + node.getChildCount() + ")" + suffix;
                label2 += prefix + " (" + node.getChildCount() + ")" + suffix;
            }
            component.setText("<html>" + label2 + "</html>");
            component.setToolTipText("<html>" + label + "</html>");
            if (pi.getPubDate().compareTo(Calendar.getInstance().getTime()) > 0) {
                // sanity check
                setIcon(fieldFolderWarningIcon);
            } else if (pi.getDoi() == null) {
                setIcon(fieldFolderWarningIcon);
            } else if (name.contains(" ")) {
                setIcon(fieldFolderWarningIcon);
            } else {
                // publications have their own icon
                setIcon(fieldPublishedPublicationIcon);
            }
        } else if (value instanceof UserNameNode) {
            UserNameNode node = (UserNameNode) value;
            String label = (String) node.getUserObject();
            String qualifier = "";
            if (sessionUser != null && sessionUser.getName().contentEquals(label)) {
                String colorString = (sel) ? "white" : "#8B0000";
                qualifier = "<font color=\"" + colorString + "\"><b>" + label + "</b></font>";
            } else {
                String colorString = (sel) ? "white" : "black";
                qualifier = "<font color=\"" + colorString + "\">" + label + "</font>";
            }
            component.setToolTipText(label);
            component.setText("<html>" + qualifier + " (" + node.getChildCount() + ")" + "</html>");
            component.setIcon(fieldFolderUserIcon);
        } else if (value instanceof BioModelNode) {
            BioModelNode node = (BioModelNode) value;
            Object userObject = node.getUserObject();
            if (userObject instanceof User) {
                String label = null;
                if (sessionUser != null && sessionUser.compareEqual((User) userObject)) {
                    label = "My BioModels (" + ((User) userObject).getName() + ") (" + node.getChildCount() + ")";
                } else {
                    label = ((User) userObject).getName() + "(abcdefghijklmnopq)(000000)";
                }
                component.setToolTipText(label);
                component.setText(label);
            } else if (userObject instanceof BioModelInfo) {
                BioModelInfo biomodelInfo = (BioModelInfo) userObject;
                if (biomodelInfo.getPublicationInfos() != null && biomodelInfo.getPublicationInfos().length > 0) {
                    if (biomodelInfo.getVersion().getFlag().compareEqual(org.vcell.util.document.VersionFlag.Published)) {
                        component.setText("(Published) " + component.getText());
                    } else {
                        component.setText("(Curated) " + component.getText());
                    }
                } else if (biomodelInfo.getVersion().getFlag().compareEqual(org.vcell.util.document.VersionFlag.Archived)) {
                    component.setText("(Archived) " + component.getText());
                }
                String str = component.getToolTipText();
                if (str != null && !str.isEmpty()) {
                    component.setToolTipText(str + " " + biomodelInfo.getVersion().getVersionKey());
                }
                // we change color of version if it's in the Other folder (Uncurated) and belongs to login user
                Object pNode = node.getParent();
                if (pNode instanceof BioModelNode) {
                    pNode = ((BioModelNode) pNode).getParent();
                    if (pNode instanceof BioModelNode && ((BioModelNode) pNode).getUserObject() instanceof String) {
                        str = (String) ((BioModelNode) pNode).getUserObject();
                        if (str.equals(VCDocumentDbTreeModel.ModelBricks) && sessionUser.getName().contentEquals(VCDocumentDbTreeModel.USER_modelBricks)) {
                            // GRAY
                            String prefix = sel ? "" : "<span style=\"color:#808080\">";
                            String suffix = sel ? "" : "</span>";
                            String str1 = prefix + component.getText() + suffix;
                            setText("<html>" + str1 + "</html>");
                        } else {
                            pNode = ((BioModelNode) pNode).getParent();
                            if (((BioModelNode) pNode).getUserObject() instanceof String && str.equalsIgnoreCase(sessionUser.getName())) {
                                str = (String) ((BioModelNode) pNode).getUserObject();
                                if (str.equals(VCDocumentDbTreeModel.Other_BioModels)) {
                                    // GRAY
                                    String prefix = sel ? "" : "<span style=\"color:#808080\">";
                                    String suffix = sel ? "" : "</span>";
                                    String str1 = prefix + component.getText() + suffix;
                                    setText("<html>" + str1 + "</html>");
                                }
                            }
                        }
                    }
                }
            } else if (userObject instanceof Geometry) {
                Geometry geo = (Geometry) userObject;
                String label = "";
                // geomety info, when spatial--shows name+1D/2D/3D
                if (geo.getDimension() > 0) {
                    label = geo.getName() + " (" + geo.getDimension() + "D)";
                } else {
                    label = BioModelChildSummary.COMPARTMENTAL_GEO_STR;
                }
                component.setToolTipText("Geometry");
                component.setText(label);
                setIcon(fieldGeometryIcon);
            } else if (userObject instanceof String && "AppType".equals(node.getRenderHint("type"))) {
                String label = (String) userObject;
                component.setToolTipText("Application type");
                component.setText(label);
                setIcon(VCellIcons.mathTypeIcon);
            } else if (userObject instanceof VCDocumentInfoNode) {
                VCDocumentInfoNode infonode = (VCDocumentInfoNode) userObject;
                User nodeUser = infonode.getVCDocumentInfo().getVersion().getOwner();
                String modelName = infonode.getVCDocumentInfo().getVersion().getName();
                String username = nodeUser.getName();
                if (username.equals(VCDocumentDbTreeModel.USER_tutorial) || // || username.equals(VCDocumentDbTreeModel.USER_Education)
                username.equals(VCDocumentDbTreeModel.USER_tutorial610) || username.equals(VCDocumentDbTreeModel.USER_tutorial611)) {
                    if (node.getParent() instanceof BioModelNode && ((BioModelNode) node.getParent()).getUserObject() instanceof String) {
                        String pName = (String) ((BioModelNode) node.getParent()).getUserObject();
                        if (pName.equals(VCDocumentDbTreeModel.Curated_BioModels)) {
                            // we add the user name to Curated
                            setText("<html><b>" + nodeUser.getName() + " </b> : " + modelName + "</html>");
                        } else {
                            // keep it simple for Education and Tutorial
                            component.setText(modelName);
                        }
                    } else {
                        component.setText(modelName);
                    }
                } else if (username.equals(VCDocumentDbTreeModel.USER_modelBricks)) {
                    if (node.getParent() instanceof UserNameNode && sessionUser.getName().contentEquals(VCDocumentDbTreeModel.USER_modelBricks)) {
                        // login user is ModelBrick, must gray everything in the Other (Uncurated) folder
                        // ATTANTION: the Uncurated folder is populated with bricks only in the versions of vCell where the ModelBricks
                        // folder is missing !!!
                        String toolTip = modelName;
                        // GRAY
                        String prefix = sel ? "" : "<span style=\"color:#808080\">";
                        String suffix = sel ? "" : "</span>";
                        String str1 = prefix + modelName + suffix;
                        component.setText("<html>" + str1 + "</html>");
                        component.setToolTipText(toolTip);
                    } else if (node.getParent() instanceof BioModelNode && ((BioModelNode) node.getParent()).getUserObject() instanceof String && sessionUser.getName().contentEquals(VCDocumentDbTreeModel.USER_modelBricks) && ((String) ((BioModelNode) node.getParent()).getUserObject()).equals(VCDocumentDbTreeModel.ModelBricks)) {
                        // login user is ModelBrick, and the model Bricks folder is present -> we must gray everything in it
                        // do exactly what we did for the "Other" folder, just above
                        String toolTip = modelName;
                        // GRAY
                        String prefix = sel ? "" : "<span style=\"color:#808080\">";
                        String suffix = sel ? "" : "</span>";
                        String str1 = prefix + modelName + suffix;
                        component.setText("<html>" + str1 + "</html>");
                        component.setToolTipText(toolTip);
                    } else if (node.getParent() instanceof BioModelNode && ((BioModelNode) node.getParent()).getUserObject() instanceof String) {
                        String pName = (String) ((BioModelNode) node.getParent()).getUserObject();
                        String toolTip = modelName;
                        if (!sessionUser.getName().contentEquals(VCDocumentDbTreeModel.USER_modelBricks) && modelName.contains(VCDocumentDbTreeModel.ModelBricksNameSeparator)) {
                            modelName = modelName.substring(modelName.indexOf(VCDocumentDbTreeModel.ModelBricksNameSeparator) + VCDocumentDbTreeModel.ModelBricksNameSeparator.length());
                            String prefix = toolTip.substring(0, toolTip.indexOf(VCDocumentDbTreeModel.ModelBricksNameSeparator));
                            toolTip = "id: " + prefix + ", name: " + modelName;
                        }
                        if (pName.equals(VCDocumentDbTreeModel.Curated_BioModels)) {
                            // we add the user name to Curated
                            setText("<html><b>" + nodeUser.getName() + " </b> : " + modelName + "</html>");
                            component.setToolTipText(toolTip);
                        } else if (pName.equals(VCDocumentDbTreeModel.ModelBricks)) {
                            component.setText(modelName);
                            component.setToolTipText(toolTip);
                        } else {
                            String str = modelName;
                            if (node.getChildCount() > 1) {
                                String prefix = sel ? "" : "<span style=\"color:#8B0000\">";
                                String suffix = sel ? "" : "</span>";
                                str += prefix + " (" + node.getChildCount() + ")" + suffix;
                            }
                            component.setText("<html>" + str + "</html>");
                            component.setToolTipText(toolTip);
                        }
                    } else {
                        component.setText(modelName);
                    }
                } else if (nodeUser.compareEqual(sessionUser)) {
                    Object pNode = node.getParent();
                    if (pNode instanceof BioModelNode) {
                        BioModelNode parent = (BioModelNode) pNode;
                        // TODO: do this differently
                        if (parent.getUserObject() instanceof String) {
                            // the Published, Curated and Other folders are the only
                            // ones where the user object is a String
                            String str = (String) parent.getUserObject();
                            if (str.equals(VCDocumentDbTreeModel.Published_BioModels) || str.equals(VCDocumentDbTreeModel.Curated_BioModels)) /*|| str.equals(VCDocumentDbTreeModel.Other_BioModels)*/
                            {
                                String prefix = sel ? "" : "<span style=\"color:#8B0000\">";
                                String suffix = sel ? "" : "</span>";
                                setText("<html><b>" + prefix + nodeUser.getName() + suffix + "</b>  : " + modelName + "</html>");
                            } else {
                                // in the Other folder / owner folder
                                // GRAY
                                String prefix = sel ? "" : "<span style=\"color:#808080\">";
                                String suffix = sel ? "" : "</span>";
                                String str1 = prefix + modelName + suffix;
                                if (node.getChildCount() > 1) {
                                    prefix = sel ? "" : "<span style=\"color:#8B0000\">";
                                    suffix = sel ? "" : "</span>";
                                    str1 += prefix + " (" + node.getChildCount() + ")" + suffix;
                                }
                                // the name of the model container - which holds the versions
                                setText("<html>" + str1 + "</html>");
                            }
                        } else if (parent.getUserObject() instanceof PublicationInfo) {
                            String prefix = sel ? "" : "<span style=\"color:#8B0000\">";
                            String suffix = sel ? "" : "</span>";
                            setText("<html><b>" + prefix + nodeUser.getName() + suffix + "</b>  : " + modelName + "</html>");
                        } else {
                            String str = modelName;
                            if (node.getChildCount() > 1) {
                                String prefix = sel ? "" : "<span style=\"color:#8B0000\">";
                                String suffix = sel ? "" : "</span>";
                                str += prefix + " (" + node.getChildCount() + ")" + suffix;
                            }
                            setText("<html>" + str + "</html>");
                        }
                    } else {
                        // unreachable
                        setText(modelName);
                    }
                } else {
                    Object pNode = node.getParent();
                    if (pNode instanceof UserNameNode) {
                        // if we are inside an UserName folder (like Shared or Uncurated public),
                        // don't prefix again the model with the user name
                        String str = modelName;
                        if (node.getChildCount() > 1) {
                            String prefix = sel ? "" : "<span style=\"color:#8B0000\">";
                            String suffix = sel ? "" : "</span>";
                            str += prefix + " (" + node.getChildCount() + ")" + suffix;
                        }
                        setText("<html>" + str + "</html>");
                    } else {
                        // content of "Published" folder
                        setText("<html><b>" + nodeUser.getName() + " </b> : " + modelName + "</html>");
                    }
                }
            }
        }
    } catch (Throwable e) {
        e.printStackTrace(System.out);
    }
    // 
    if (component.getToolTipText() == null || component.getToolTipText().length() == 0) {
        component.setToolTipText(component.getText());
    }
    return component;
}
Also used : UserNameNode(cbit.vcell.desktop.BioModelNode.UserNameNode) DateNode(cbit.vcell.xml.gui.MiriamTreeModel.DateNode) User(org.vcell.util.document.User) PublicationInfo(org.vcell.util.document.PublicationInfo) BioModelInfo(org.vcell.util.document.BioModelInfo) JLabel(javax.swing.JLabel) Geometry(cbit.vcell.geometry.Geometry) AnnotationQualifier(org.vcell.sybil.models.AnnotationQualifier) LinkNode(cbit.vcell.xml.gui.MiriamTreeModel.LinkNode) MIRIAMQualifier(org.vcell.sybil.models.miriam.MIRIAMQualifier) SimpleDateFormat(java.text.SimpleDateFormat) PublicationInfoNode(cbit.vcell.desktop.BioModelNode.PublicationInfoNode)

Aggregations

UserNameNode (cbit.vcell.desktop.BioModelNode.UserNameNode)4 PublicationInfoNode (cbit.vcell.desktop.BioModelNode.PublicationInfoNode)3 JLabel (javax.swing.JLabel)3 PublicationInfo (org.vcell.util.document.PublicationInfo)3 User (org.vcell.util.document.User)3 SimpleDateFormat (java.text.SimpleDateFormat)2 VCDocumentInfoNode (cbit.vcell.desktop.VCellBasicCellRenderer.VCDocumentInfoNode)1 Geometry (cbit.vcell.geometry.Geometry)1 DateNode (cbit.vcell.xml.gui.MiriamTreeModel.DateNode)1 LinkNode (cbit.vcell.xml.gui.MiriamTreeModel.LinkNode)1 BigDecimal (java.math.BigDecimal)1 LinkedHashMap (java.util.LinkedHashMap)1 LinkedList (java.util.LinkedList)1 AnnotationQualifier (org.vcell.sybil.models.AnnotationQualifier)1 MIRIAMQualifier (org.vcell.sybil.models.miriam.MIRIAMQualifier)1 BioModelInfo (org.vcell.util.document.BioModelInfo)1 KeyValue (org.vcell.util.document.KeyValue)1 MathModelInfo (org.vcell.util.document.MathModelInfo)1 VCDocumentInfo (org.vcell.util.document.VCDocumentInfo)1