/* * Created on Dec 4, 2005 * */ package org.incha.core.jswingripples.rules; import java.awt.Color; import java.awt.Image; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Set; import org.eclipse.jdt.core.IMember; import org.eclipse.jdt.core.IType; import org.incha.core.jswingripples.JRipplesICModuleInterface; import org.incha.core.jswingripples.eig.JSwingRipplesEIG; import org.incha.core.jswingripples.eig.JSwingRipplesEIGNode; import org.incha.ui.jripples.EIGStatusMarks; /** * @author Maksym Petrenko * */ public class JRipplesModuleICDefaultConceptLocation implements JRipplesICModuleInterface { private JSwingRipplesEIGNode currentNode = null; private final JSwingRipplesEIG eig; /** * @param eig the eig. */ public JRipplesModuleICDefaultConceptLocation(final JSwingRipplesEIG eig) { super(); this.eig = eig; } /* * (non-Javadoc) * * @see org.severe.jripples.modules.interfaces.JRipplesICModuleInterface#GetAvailableRulesForMark(java.lang.String) */ @Override public Set<String> GetAvailableRulesForMark(final String mark) { if (mark == null) { return null; } else if (mark.compareTo(EIGStatusMarks.BLANK) == 0) { return null; } else if (mark.compareTo(EIGStatusMarks.NEXT_VISIT) == 0) { final String marks[] = { EIGStatusMarks.LOCATED, EIGStatusMarks.VISITED_CONTINUE, EIGStatusMarks.VISITED }; return (new LinkedHashSet<String>(Arrays.asList(marks))); } else if (mark.compareTo(EIGStatusMarks.LOCATED) == 0) { final String marks[] = { EIGStatusMarks.LOCATED}; return (new LinkedHashSet<String>(Arrays.asList(marks))); } else if (mark.compareTo(EIGStatusMarks.VISITED_CONTINUE) == 0) { final String marks[] = { EIGStatusMarks.LOCATED,EIGStatusMarks.VISITED_CONTINUE}; return (new LinkedHashSet<String>(Arrays.asList(marks))); } else { return null; } } public JSwingRipplesEIGNode getCurrentNode() { return currentNode; } /* * (non-Javadoc) * * @see org.severe.jripples.modules.interfaces.JRipplesModuleInterface#shutDown(int controllerType) */ @Override public void shutDown(final int controllerType) { } /* * (non-Javadoc) * * @see org.severe.jripples.modules.interfaces.JRipplesICModuleInterface#initializeStage() */ @Override public void InitializeStage() { final JSwingRipplesEIGNode[] nodes = eig.getAllNodes(); if (nodes != null) { for (int i = 0; i < nodes.length; i++) { nodes[i].setMark(EIGStatusMarks.BLANK); } if (eig.getMainClass() != null) { final JSwingRipplesEIGNode mainType = getType(nodes, eig.getMainClass()); if (mainType != null) { mainType.setMark(EIGStatusMarks.NEXT_VISIT); currentNode = mainType; } } } eig.getHistory().clear(); } /** * @param nodes * @param mainClass * @return */ private JSwingRipplesEIGNode getType(final JSwingRipplesEIGNode[] nodes, final String mainClass) { for (int i = 0; i < nodes.length; i++) { final IMember member = nodes[i].getNodeIMember(); if (member instanceof IType && ((IType) member).getFullyQualifiedName().equals( eig.getMainClass())) { return nodes[i]; } } return null; } @Override public Set<String> getAllMarks() { final String marks[] = { EIGStatusMarks.LOCATED, EIGStatusMarks.VISITED_CONTINUE, EIGStatusMarks.VISITED,EIGStatusMarks.BLANK ,EIGStatusMarks.NEXT_VISIT}; return (new LinkedHashSet<String>(Arrays.asList(marks))); } /* * (non-Javadoc) * * @see org.severe.jripples.modules.interfaces.JRipplesICModuleInterface#ApplyRuleAtNode(java.lang.String, * java.lang.String) */ @Override public void ApplyRuleAtNode(final String rule, final JSwingRipplesEIGNode node, final int granularity) { currentNode=node; if (rule.compareTo(EIGStatusMarks.LOCATED) == 0) { CommonEIGRules.assignMarkToNodeAndParents(eig, node,EIGStatusMarks.LOCATED); } else if (rule.compareTo(EIGStatusMarks.VISITED_CONTINUE) == 0) { CommonEIGRules.applyRuleToNode(eig, node,rule,granularity); } else if (rule.compareTo(EIGStatusMarks.VISITED) == 0) { CommonEIGRules.applyRuleToNode(eig, node,rule,0); } } @Override public void ApplyRuleAtNode(final String rule, final JSwingRipplesEIGNode nodeFrom, final JSwingRipplesEIGNode nodeTo) { if (rule.compareTo(EIGStatusMarks.LOCATED) == 0) { CommonEIGRules.assignMarkToNodeAndParents(eig, nodeFrom,EIGStatusMarks.LOCATED); } else if (rule.compareTo(EIGStatusMarks.VISITED_CONTINUE) == 0) { CommonEIGRules.assignMarkToNodeAndNeighbor(eig, nodeFrom, nodeTo, rule,EIGStatusMarks.NEXT_VISIT); } else if (rule.compareTo(EIGStatusMarks.VISITED) == 0) { CommonEIGRules.applyRuleToNode(eig, nodeFrom,rule,0); } } @Override public Image getImageDescriptorForMark(final String mark) { return EIGStatusMarks.getImageDescriptorForMark(mark); } @Override public Color getColorForMark(final String mark) { return EIGStatusMarks.getColorForMark(mark); } /* (non-Javadoc) * @see org.incha.core.jswingripples.JRipplesModuleInterface#initializeStage() */ @Override public void runInAnalize() { InitializeStage(); } }