Package de.FeatureModellingTool.PLModelChecker.RelationAnalysis

Source Code of de.FeatureModellingTool.PLModelChecker.RelationAnalysis.RequireRelationDiagram$AtomNodes

package de.FeatureModellingTool.PLModelChecker.RelationAnalysis;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import de.FeatureModellingTool.FeatureModel.CFRModifier;
import de.FeatureModellingTool.FeatureModel.ConstraintModel;
import de.FeatureModellingTool.FeatureModel.Feature;
import de.FeatureModellingTool.FeatureModel.FeatureModel;
import de.FeatureModellingTool.FeatureModel.FeatureRelation;
import de.FeatureModellingTool.FeatureModel.GroupConstraint;
import de.FeatureModellingTool.FeatureModel.GroupConstraintType;
import de.FeatureModellingTool.FeatureModel.Variability;

public class RequireRelationDiagram {

  public static String getKey(Feature feature , boolean value) {
    return feature.getID() + " value=" + (value ? "true" : "false");
  }
 
  public RequireRelationDiagram(FeatureModel fm , ConstraintModel cm) {
    this.fm = fm;
    this.cm = cm;
   
    this.buildGraph();
  }
 
  protected FeatureModel fm = null;
  protected ConstraintModel cm = null;
 
  public DGraph graph = new DGraph();
 
  protected void buildGraph() {
    for (Iterator<FeatureRelation> itRelation=this.fm.getAllFeatureRelation().values().iterator() ; itRelation.hasNext() ; ) {
      FeatureRelation fr = itRelation.next();
      if (fr.getName().equals(FeatureRelation.EXCLUDE)) {
        this.graph.addEdge(fr.getStartFeature() , true , fr.getEndFeature() , false);
      } else if (fr.getName().equals(FeatureRelation.REQUIRE)) {
        this.graph.addEdge(fr.getStartFeature() , true , fr.getEndFeature() , true);
      } else {
        this.graph.addEdge(fr.getEndFeature() , true , fr.getStartFeature() , true);
        if (fr.getEndFeature().getVariability().equals(Variability.Mandatory)) {
          this.graph.addEdge(fr.getStartFeature() , true , fr.getEndFeature() , true);
        }
      }
    }
   
    for (Iterator<GroupConstraint> itGC=this.cm.getAllGroupConstraint().values().iterator() ; itGC.hasNext() ; ) {
      GroupConstraint gc = itGC.next();
      if (gc.getType().equals(GroupConstraintType.SingleGroup)) {
        List<Feature> features = new ArrayList<Feature>(gc.getFeatureSet());
        for (int i=0 ; i<features.size() ; i++) {
          for (int j=0 ; j<features.size() ; j++) {
            if (i!=j) {
              CFRModifier c;
              this.graph.addEdge(features.get(i) , cm.getCFRelation(features.get(i),gc,false).getModifier().equals(CFRModifier.Affirmation)
                  , features.get(j) , !cm.getCFRelation(features.get(j),gc,false).getModifier().equals(CFRModifier.Affirmation));
            }
          }
        }
      } else if (gc.getType().equals(GroupConstraintType.AllGroup)) {
        List<Feature> features = new ArrayList<Feature>(gc.getFeatureSet());
        for (int i=0 ; i<features.size() ; i++) {
          for (int j=0 ; j<features.size() ; j++) {
            if (i!=j) {
              this.graph.addEdge(features.get(i) , cm.getCFRelation(features.get(i),gc,false).getModifier().equals(CFRModifier.Affirmation)
                  , features.get(j) , cm.getCFRelation(features.get(j),gc,false).getModifier().equals(CFRModifier.Affirmation));
            }
          }
        }
      }
    }
   
//    for (Iterator<CompositeConstraint> itCC=this.cm.getAllCompositeConstraint().values().iterator() ; itCC.hasNext() ; ) {
//      CompositeConstraint cc = itCC.next();
//     
//    }
  }

  public class DGraph {
    public Map<String,DNode> nodes = new HashMap<String,DNode>();
    public void addFeature(Feature feature) {
      DNode node = new DNode(feature , true);
      this.nodes.put(getKey(feature , true) , node);
      node = new DNode(feature , false);
      this.nodes.put(getKey(feature , false) , node);
    }
    public void addEdge(Feature f1 , boolean v1 , Feature f2 , boolean v2) {
      this.nodes.get(getKey(f1,v1)).nodes.add(this.nodes.get(getKey(f2,v2)));
      this.nodes.get(getKey(f2,!v2)).nodes.add(this.nodes.get(getKey(f1,!v1)));
    }
  }
 
  public class DNode {
    public DNode(Feature feature , boolean value) {
      this.feature = feature;
      this.value = value;
    }
   
    public Feature feature;
    public boolean value;
    public Set<DNode> nodes = new HashSet<DNode>();
    public int weight = 0;
  }

  public class AtomNodes{
    public Map<Feature,DNode> atomMap = new HashMap<Feature,DNode>();
  }
}
TOP

Related Classes of de.FeatureModellingTool.PLModelChecker.RelationAnalysis.RequireRelationDiagram$AtomNodes

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.