001 /* EVolve - an Extensible Software Visualization Framework
002 * Copyright (C) 2001-2002 Qin Wang
003 *
004 * This library is free software; you can redistribute it and/or
005 * modify it under the terms of the GNU Library General Public
006 * License as published by the Free Software Foundation; either
007 * version 2 of the License, or (at your option) any later version.
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Library General Public License for more details.
013 *
014 * You should have received a copy of the GNU Library General Public
015 * License along with this library; if not, write to the
016 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
017 * Boston, MA 02111-1307, USA.
018 */
019
020 /*
021 * EVolve is distributed at http://www.sable.mcgill.ca/EVolve/
022 */
023
024 package EVolve.data;
025
026 import EVolve.*;
027 import java.awt.*;
028
029 public class ElementFilter {
030 private int[] linkIndex;
031 private Color[][] color;
032 protected Color colorBlue = new Color(120, 160, 255);
033
034 public ElementFilter(ElementDefinition elementDefinition, Selection[] selection) {
035 int count = 0;
036 for (int i = 0; i < elementDefinition.getFieldDefinition().length; i++) {
037 if (elementDefinition.getFieldDefinition()[i].getReference() != -1) {
038 count++;
039 }
040 }
041 linkIndex = new int[count];
042 count = 0;
043 for (int i = 0; i < elementDefinition.getFieldDefinition().length; i++) {
044 if (elementDefinition.getFieldDefinition()[i].getReference() != -1) {
045 linkIndex[count] = i;
046 count++;
047 }
048 }
049
050 color = new Color[linkIndex.length][];
051 for (int i = 0; i < color.length; i++) {
052 color[i] = new Color[Scene.getDataManager().getEntity()[elementDefinition.getFieldDefinition()[linkIndex[i]].getReference()].length];
053 for (int j = 0; j < color[i].length; j++) {
054 color[i][j] = colorBlue;//Color.black;
055 for (int k = 0; k < selection.length; k++) {
056 boolean isSelected = true;
057 for (int l = 0; l < selection[k].getLink().length; l++) {
058 if ((selection[k].getLink()[l].getSourceType() == elementDefinition.getType()) && (selection[k].getLink()[l].getSourceIndex() == linkIndex[i])) {
059 isSelected = false;
060 for (int m = 0; m < selection[k].getSelected().length; m++) {
061 if (selection[k].getLink()[l].getTarget(j) == selection[k].getSelected()[m].getId()) {
062 isSelected = true;
063 if ((color[i][j] == colorBlue/*Color.black*/) && (selection[k].getColor() != null)) {
064 color[i][j] = selection[k].getColor();
065 }
066 break;
067 }
068 }
069 break;
070 }
071 }
072 if ((!isSelected) && (selection[k].getColor() == null)) {
073 color[i][j] = null;
074 break;
075 }
076 }
077 }
078 }
079 }
080
081 public Color getColor(Element element) {
082 Color result = colorBlue;//Color.black;
083 for (int i = 0; i < linkIndex.length; i++) {
084 if (color[i][element.getField()[linkIndex[i]]] == null) {
085 return null;
086 }
087 if (result == colorBlue/*Color.black*/) {
088 result = color[i][element.getField()[linkIndex[i]]];
089 }
090 }
091 return result;
092 }
093 }