Package de.FeatureModellingTool.Customize.ui

Source Code of de.FeatureModellingTool.Customize.ui.ImageManager

package de.FeatureModellingTool.Customize.ui;

import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

import de.FeatureModellingTool.Customize.Customization;
import de.FeatureModellingTool.FeatureModel.CompositeConstraintPortType;
import de.FeatureModellingTool.FeatureModel.CompositeConstraintType;
import de.FeatureModellingTool.FeatureModel.FeatureRelation;
import de.FeatureModellingTool.FeatureModel.GroupConstraintType;

public class ImageManager {
  private static ImageManager self = null;
  public static ImageManager getInstance() {
    if (ImageManager.self==null) {
      ImageManager.self = new ImageManager();
    }
    return ImageManager.self;
  }
 
  private static String DISABLE_TAG = "_disabled";
 
  private static String HI_CC_LREQUIRE = "hi_cc_lrequire";
  private static String HI_CC_RREQUIRE = "hi_cc_rrequire";
  private static String HI_CC_MREQUIRE = "hi_cc_mrequire";
  private static String HI_CC_MUTEX = "hi_cc_mutex";
  private static String HI_CC_ALL_LEFT = "hi_cc_all_left";
  private static String HI_CC_SINGLE_LEFT = "hi_cc_single_left";
  private static String HI_CC_MULTI_LEFT = "hi_cc_multi_left";
  private static String HI_CC_ALL_RIGHT = "hi_cc_all_right";
  private static String HI_CC_SINGLE_RIGHT = "hi_cc_single_right";
  private static String HI_CC_MULTI_RIGHT = "hi_cc_multi_right";

  private static String HI_GC_ALL = "hi_gc_all";
  private static String HI_GC_SINGLE = "hi_gc_single";
  private static String HI_GC_NONE = "hi_gc_none";

  private static String HI_REQUIRE = "hi_require";
  private static String HI_MUTEX = "hi_mutex";
 
  private static String HI_TRUE = "hi_true";
  private static String HI_FALSE = "hi_false";
  private static String HI_QUESTION = "hi_question";
 
  private static String CI_SELECTED = "ci_selected";
  private static String CI_UNSELECTED = "ci_unselected";
  private static String CI_UNDECIDED = "ci_undecided";
  private static String CI_TAG = "_tag";
  private static String CI_SELECTED_TAG = CI_SELECTED + CI_TAG;
  private static String CI_UNSELECTED_TAG = CI_UNSELECTED + CI_TAG;
  private static String CI_UNDECIDED_TAG = CI_UNDECIDED + CI_TAG;
 
  private static String HI_ALERT = CI_UNSELECTED;
  private static String HI_NOTIFY = "hi_transfer";
 
  private Hashtable<String , BufferedImage> htImage = new Hashtable<String , BufferedImage>();
  private Hashtable<String , ImageIcon> htImageIcon = new Hashtable<String , ImageIcon>();
 
  private ImageManager() {
    String host = "http://localhost:8080/FMTool_Web2/customizeui/";
    try {
      this.htImage.put(ImageManager.HI_CC_LREQUIRE , ImageIO.read(new URL(host + ImageManager.HI_CC_LREQUIRE + ".png") ));
      this.htImage.put(ImageManager.HI_CC_RREQUIRE , ImageIO.read(new URL(host + ImageManager.HI_CC_RREQUIRE + ".png")));
      this.htImage.put(ImageManager.HI_CC_MREQUIRE , ImageIO.read(new URL(host + ImageManager.HI_CC_MREQUIRE + ".png")));
      this.htImage.put(ImageManager.HI_CC_MUTEX , ImageIO.read(new URL(host + ImageManager.HI_CC_MUTEX + ".png")));
      this.htImage.put(ImageManager.HI_CC_ALL_LEFT , ImageIO.read(new URL(host + ImageManager.HI_CC_ALL_LEFT + ".png")));
      this.htImage.put(ImageManager.HI_CC_SINGLE_LEFT , ImageIO.read(new URL(host + ImageManager.HI_CC_SINGLE_LEFT + ".png")));
      this.htImage.put(ImageManager.HI_CC_MULTI_LEFT , ImageIO.read(new URL(host + ImageManager.HI_CC_MULTI_LEFT + ".png")));
      this.htImage.put(ImageManager.HI_CC_ALL_RIGHT , ImageIO.read(new URL(host + ImageManager.HI_CC_ALL_RIGHT + ".png")));
      this.htImage.put(ImageManager.HI_CC_SINGLE_RIGHT , ImageIO.read(new URL(host + ImageManager.HI_CC_SINGLE_RIGHT + ".png")));
      this.htImage.put(ImageManager.HI_CC_MULTI_RIGHT , ImageIO.read(new URL(host + ImageManager.HI_CC_MULTI_RIGHT + ".png")));

      this.htImage.put(ImageManager.HI_GC_ALL , ImageIO.read(new URL(host + ImageManager.HI_GC_ALL + ".png")));
      this.htImage.put(ImageManager.HI_GC_SINGLE , ImageIO.read(new URL(host + ImageManager.HI_GC_SINGLE + ".png")));
      this.htImage.put(ImageManager.HI_GC_NONE , ImageIO.read(new URL(host + ImageManager.HI_GC_NONE + ".png")));

      this.htImage.put(ImageManager.HI_REQUIRE , ImageIO.read(new URL(host + ImageManager.HI_REQUIRE + ".png")));
      this.htImage.put(ImageManager.HI_MUTEX , ImageIO.read(new URL(host + ImageManager.HI_MUTEX + ".png")));
     
      this.htImage.put(ImageManager.HI_TRUE , ImageIO.read(new URL(host + ImageManager.HI_TRUE + ".png")));
      this.htImage.put(ImageManager.HI_FALSE , ImageIO.read(new URL(host + ImageManager.HI_FALSE + ".png")));
      this.htImage.put(ImageManager.HI_QUESTION , ImageIO.read(new URL(host + ImageManager.HI_QUESTION + ".png")));
     
//      this.htImage.put(ImageManager.HI_ALERT , ImageIO.read(new URL(host + ImageManager.HI_ALERT + ".png")));
      this.htImage.put(ImageManager.HI_NOTIFY , ImageIO.read(new URL(host + ImageManager.HI_NOTIFY + ".png")));

      this.htImage.put(ImageManager.CI_SELECTED , ImageIO.read(new URL(host + ImageManager.CI_SELECTED + ".png")));
      this.htImage.put(ImageManager.CI_UNSELECTED , ImageIO.read(new URL(host + ImageManager.CI_UNSELECTED + ".png")));
      this.htImage.put(ImageManager.CI_UNDECIDED , ImageIO.read(new URL(host + ImageManager.CI_UNDECIDED + ".png")));
      this.htImage.put(ImageManager.CI_SELECTED_TAG , ImageIO.read(new URL(host + ImageManager.CI_SELECTED_TAG + ".png")));
      this.htImage.put(ImageManager.CI_UNSELECTED_TAG , ImageIO.read(new URL(host + ImageManager.CI_UNSELECTED_TAG + ".png")));
      this.htImage.put(ImageManager.CI_UNDECIDED_TAG , ImageIO.read(new URL(host + ImageManager.CI_UNDECIDED_TAG + ".png")));
    } catch (IOException ex) { 
      ex.printStackTrace();
    }
  }
 
  private String getName(List<String> names) {
    String result = "";
    for (int i=0 ; i<names.size() ; i++) {
      result += names.get(i);
      if (i<names.size()-1) {
        result += " ";
      }
    }
    return result;
  }
 
  private String getName(String name , boolean enabled) {
    return name + (enabled ? "" : ImageManager.DISABLE_TAG);
  }
 
  private String getName(List<String> upNames , List<String> downNames , boolean enabled) {
    return getName(getName(upNames) , enabled) + " " + getName(getName(downNames) , enabled);
  }
 
  private BufferedImage getImage(List<String> names , boolean enabled) {
    String name = getName(names);
    if (!this.htImage.contains(name)) {
      int imageWidth = 0;
      int imageHeight = 0;
      for (int i=0 ; i<names.size() ; i++) {
        BufferedImage img = this.htImage.get(names.get(i));
        imageWidth += img.getWidth();
        if (img.getHeight()>imageHeight) {
          imageHeight = img.getHeight();
        }
      }
     
      BufferedImage result = new BufferedImage(Math.max(imageWidth,1) , Math.max(imageHeight,1) , BufferedImage.TYPE_INT_ARGB);
     
      imageWidth = 0;
      for (int i=0 ; i<names.size() ; i++) {
        BufferedImage img = this.htImage.get(names.get(i));
        for (int x=0 ; x<img.getWidth() ; x++)
          for (int y=0 ; y<img.getHeight() ; y++) {
            result.setRGB(imageWidth + x , y , img.getRGB(x , y));
          }
        imageWidth += img.getWidth();
      }
     
      this.htImage.put(name , result);
    }
   
    if (!enabled) {
      if (!this.htImage.contains(this.getName(name, enabled))) {
        BufferedImage img = this.htImage.get(name);
       
        ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
        ColorConvertOp op = new ColorConvertOp(cs, null);
       
        BufferedImage result = op.filter(img , null);
       
        this.htImage.put(this.getName(name , enabled) , result);
      }
      name = this.getName(name , enabled);
    }
   
    return this.htImage.get(name);
  }
   
  private BufferedImage getImage(List<String> upNames , List<String> downNames , boolean enabled) {
    BufferedImage upImage = this.getImage(upNames , enabled);
    BufferedImage downImage = this.getImage(downNames , enabled);
   
    if (upImage==null) {
      return downImage;
    } else if (downImage==null) {
      return upImage;
    }
   
    String name = getName(upNames , downNames , enabled);
    if (!this.htImage.contains(name)) {
      BufferedImage result = new BufferedImage(Math.max(upImage.getWidth() , downImage.getWidth()) , upImage.getHeight() + downImage.getHeight() , BufferedImage.TYPE_INT_ARGB);
     
      int upOff = upImage.getWidth()>downImage.getWidth() ? 0 : (downImage.getWidth()-upImage.getWidth())/2;
      int downOff = downImage.getWidth()>upImage.getWidth() ? 0 : (upImage.getWidth()-downImage.getWidth())/2;
     
      for (int x=0 ; x<upImage.getWidth() ; x++)
        for (int y=0 ; y<upImage.getHeight() ; y++) {
          result.setRGB(upOff + x , y , upImage.getRGB(x , y));
        }
      for (int x=0 ; x<downImage.getWidth() ; x++)
        for (int y=0 ; y<downImage.getHeight() ; y++) {
          result.setRGB(downOff + x , upImage.getHeight() + y , downImage.getRGB(x , y));
        }
     
      this.htImage.put(name , result);
    }
   
    return this.htImage.get(name);
  }
   
  private ImageIcon getIcon(List<String> names , boolean enabled) {
    String name = getName(getName(names) , enabled);
    if (!this.htImageIcon.contains(name)) {
      ImageIcon ii = new ImageIcon(getImage(names , enabled));
      this.htImageIcon.put(name , ii);
    }
    return this.htImageIcon.get(name);
  }

  private ImageIcon getIcon(List<String> upNames , List<String> downNames , boolean enabled) {
    String name = getName(upNames , downNames , enabled);
    if (!this.htImageIcon.contains(name)) {
      ImageIcon ii = new ImageIcon(getImage(upNames , downNames , enabled));
      this.htImageIcon.put(name , ii);
    }
    return this.htImageIcon.get(name);
  }

  protected String getValueImageName(Customization cus) {
    if (cus.equals(Customization.Selected)) {
      return ImageManager.HI_TRUE;
    } else if (cus.equals(Customization.Unselected)) {
      return ImageManager.HI_FALSE;
    } else /*if (cus.getName().equals(Customization.Undecided)) */{
      return ImageManager.HI_QUESTION;
   
  }
 
  protected String getCustomizationImageName(Customization cus) {
    if (cus.equals(Customization.Selected)) {
      return CI_SELECTED;
    } else if (cus.equals(Customization.Unselected)) {
      return CI_UNSELECTED;
    } else {
      return CI_UNDECIDED;
    }
  }
 
  public ImageIcon getCustomizationIcon(Customization cFinal , Customization cSelf , boolean enabled) {
    List<String> names = new ArrayList<String>();
    names.add(this.getCustomizationImageName(cFinal));
    if (!cFinal.equals(cSelf)) {
      names.add(this.getCustomizationImageName(cSelf) + CI_TAG);
    }
   
    return this.getIcon(names , enabled);
  }
 
  public enum ConstraintStat {csNone , csConflict , csFlow};
  public ImageIcon getCompositeConstraintHeader(CompositeConstraintPortType lType
      , CompositeConstraintPortType rType , CompositeConstraintType ccType
      , Customization leftValue , Customization rightValue , ConstraintStat cs) {
    List<String> status = new ArrayList<String>();
    List<String> names = new ArrayList<String>();
    if (leftValue!=null) {
      if (ccType.equals(CompositeConstraintType.Mutex)) {
        if (leftValue.equals(Customization.Undecided) || rightValue.equals(Customization.Undecided)) {
          status.add(ImageManager.CI_UNDECIDED);
        } else if (leftValue.equals(Customization.Selected) && rightValue.equals(Customization.Selected)) {
          status.add(ImageManager.CI_UNSELECTED);
        } else {
          status.add(ImageManager.CI_SELECTED);
        }
      } else if (ccType.equals(CompositeConstraintType.L2R_Implication)) {
        if (rightValue.equals(Customization.Selected)) {
          status.add(ImageManager.CI_SELECTED);
        } else if (leftValue.equals(Customization.Undecided) || rightValue.equals(Customization.Undecided)) {
          status.add(ImageManager.CI_UNDECIDED);
        } else {
          status.add(ImageManager.CI_UNSELECTED);
        }
      } else if (ccType.equals(CompositeConstraintType.R2L_Implication)) {
        if (leftValue.equals(Customization.Selected)) {
          status.add(ImageManager.CI_SELECTED);
        } else if (leftValue.equals(Customization.Undecided) || rightValue.equals(Customization.Undecided)) {
          status.add(ImageManager.CI_UNDECIDED);
        } else {
          status.add(ImageManager.CI_UNSELECTED);
        }
      } else if (ccType.equals(CompositeConstraintType.Equivalence)) {
        if (leftValue.equals(Customization.Undecided) || rightValue.equals(Customization.Undecided)) {
          status.add(ImageManager.CI_UNDECIDED);
        } else if (leftValue.equals(Customization.Selected) && rightValue.equals(Customization.Selected)
            || leftValue.equals(Customization.Unselected) && rightValue.equals(Customization.Unselected)) {
          status.add(ImageManager.CI_SELECTED);
        } else {
          status.add(ImageManager.CI_UNSELECTED);
        }
      }
    }
    if (leftValue!=null) {
      names.add(this.getValueImageName(leftValue));
    }
    if (lType.equals(CompositeConstraintPortType.All)) {
      names.add(ImageManager.HI_CC_ALL_LEFT);
    } else if (lType.equals(CompositeConstraintPortType.Multi)) {
      names.add(ImageManager.HI_CC_MULTI_LEFT);
    } else if (lType.equals(CompositeConstraintPortType.Single)) {
      names.add(ImageManager.HI_CC_SINGLE_LEFT);
    }
    if (ccType.equals(CompositeConstraintType.Mutex)) {
      names.add(ImageManager.HI_CC_MUTEX);
    } else if (ccType.equals(CompositeConstraintType.L2R_Implication)) {
      names.add(ImageManager.HI_CC_LREQUIRE);
    } else if (ccType.equals(CompositeConstraintType.R2L_Implication)) {
      names.add(ImageManager.HI_CC_RREQUIRE);
    } else if (ccType.equals(CompositeConstraintType.Equivalence)) {
      names.add(ImageManager.HI_CC_MREQUIRE);
    }
    if (rType.equals(CompositeConstraintPortType.All)) {
      names.add(ImageManager.HI_CC_ALL_RIGHT);
    } else if (rType.equals(CompositeConstraintPortType.Multi)) {
      names.add(ImageManager.HI_CC_MULTI_RIGHT);
    } else if (rType.equals(CompositeConstraintPortType.Single)) {
      names.add(ImageManager.HI_CC_SINGLE_RIGHT);
    }
    if (rightValue!=null) {
      names.add(this.getValueImageName(rightValue));
    }
   
    return getIcon(names , status , true);
  }
 
  public ImageIcon getGroupConstraintHeader(GroupConstraintType gcType
      , Customization rightValue , ConstraintStat cs) {
    List<String> names = new ArrayList<String>();
    List<String> status = new ArrayList<String>();
    if (rightValue!=null) {
      status.add(getCustomizationImageName(rightValue));
    }
    if (gcType.equals(GroupConstraintType.AllGroup)) {
      names.add(ImageManager.HI_GC_ALL);
    } else if (gcType.equals(GroupConstraintType.MultiGroup)) {
      names.add(ImageManager.HI_GC_NONE);
    } else if (gcType.equals(GroupConstraintType.SingleGroup)) {
      names.add(ImageManager.HI_GC_SINGLE);
    }
    if (rightValue!=null) {
      names.add(this.getValueImageName(rightValue));
    }
   
    return getIcon(names , status , true);
  }
 
  public ImageIcon getRelationHeader(String relationName
      , Customization leftValue , Customization rightValue , ConstraintStat cs) {
    List<String> names = new ArrayList<String>();
    List<String> status = new ArrayList<String>();
    if (leftValue!=null) {
      if (relationName.equals(FeatureRelation.REQUIRE)) {
        if (leftValue.equals(Customization.Selected) && rightValue.equals(Customization.Selected)
            || leftValue.equals(Customization.Unselected) && rightValue.equals(Customization.Unselected)) {
          status.add(ImageManager.CI_SELECTED);
        } else if (leftValue.equals(Customization.Selected) && rightValue.equals(Customization.Unselected)) {
          status.add(ImageManager.CI_UNSELECTED);
        } else if (leftValue.equals(Customization.Selected) && rightValue.equals(Customization.Undecided)
            || leftValue.equals(Customization.Undecided) && rightValue.equals(Customization.Unselected)) {
          status.add(ImageManager.CI_UNDECIDED);
          status.add(ImageManager.HI_NOTIFY);
        } else {
          status.add(ImageManager.CI_UNDECIDED);
        }
      } else if (relationName.equals(FeatureRelation.EXCLUDE)) {
        if (leftValue.equals(Customization.Selected) && rightValue.equals(Customization.Selected)) {
          status.add(ImageManager.CI_UNSELECTED);
        } else if (leftValue.equals(Customization.Selected) && rightValue.equals(Customization.Unselected)
            || leftValue.equals(Customization.Unselected) && rightValue.equals(Customization.Selected)) {
          status.add(ImageManager.CI_SELECTED);
        } else if (leftValue.equals(Customization.Selected) && rightValue.equals(Customization.Undecided)
            || leftValue.equals(Customization.Undecided) && rightValue.equals(Customization.Selected)) {
          status.add(ImageManager.CI_UNDECIDED);
          status.add(ImageManager.HI_NOTIFY);
        } else {
          status.add(ImageManager.CI_UNDECIDED);
        }
      }
    }
    if (leftValue!=null) {
      names.add(this.getValueImageName(leftValue));
    }
    if (relationName.equals(FeatureRelation.REQUIRE)) {
      names.add(ImageManager.HI_REQUIRE);
    } else if (relationName.equals(FeatureRelation.EXCLUDE)) {
      names.add(ImageManager.HI_MUTEX);
    }
    if (rightValue!=null) {
      names.add(this.getValueImageName(rightValue));
    }
   
    return getIcon(names , status , true);
  }
}
TOP

Related Classes of de.FeatureModellingTool.Customize.ui.ImageManager

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.