blob: 7a775db51125cb8feeea549adbcba551359c11e1 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.beans;
import java.awt.Image;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;
import org.netbeans.api.java.source.ElementHandle;
import org.netbeans.api.java.source.TypeMirrorHandle;
import org.netbeans.api.java.source.ui.ElementIcons;
import org.openide.util.ImageUtilities;
/** Base class for patterns object. These objects hold information
* about progarammatic patterns i.e. Properties and Events in the source code
* @author Petr Hrebejk
*/
public abstract class Pattern {
public static final Comparator<Pattern> NAME_COMPARATOR = new NameComparator();
public static final String TYPE_COLOR = "#707070";
private static final String ICON_BASE = "org/netbeans/modules/beans/resources/";
private static final String GIF_EXTENSION = ".gif";
protected static final Image PATTERNS = ImageUtilities.loadImage(ICON_BASE + "patternGroup" + GIF_EXTENSION); // NOI18N
protected static final Image PROPERTY_READ = ImageUtilities.loadImage(ICON_BASE + "propertyRO" + GIF_EXTENSION); // NOI18N
protected static final Image PROPERTY_WRITE = ImageUtilities.loadImage(ICON_BASE + "propertyWO" + GIF_EXTENSION); // NOI18N
protected static final Image PROPERTY_READ_WRITE = ImageUtilities.loadImage(ICON_BASE + "propertyRW" + GIF_EXTENSION); // NOI18N
protected static final Image IDX_PROPERTY_READ = ImageUtilities.loadImage(ICON_BASE + "propertyIndexedRO" + GIF_EXTENSION); // NOI18N
protected static final Image IDX_PROPERTY_WRITE = ImageUtilities.loadImage(ICON_BASE + "propertyIndexedWO" + GIF_EXTENSION); // NOI18N
protected static final Image IDX_PROPERTY_READ_WRITE = ImageUtilities.loadImage(ICON_BASE + "propertyIndexedRW" + GIF_EXTENSION); // NOI18N
protected static final Image EVENT_SET_UNICAST = ImageUtilities.loadImage(ICON_BASE + "eventSetUnicast" + GIF_EXTENSION); // NOI18N
protected static final Image EVENT_SET_MULTICAST = ImageUtilities.loadImage(ICON_BASE + "eventSetMulticast" + GIF_EXTENSION); // NOI18N
protected static final Image CLASS = ImageUtilities.icon2Image(ElementIcons.getElementIcon(ElementKind.CLASS, Collections.<Modifier>emptySet())); // NOI18N
protected static final Image INTERFACE = ImageUtilities.icon2Image(ElementIcons.getElementIcon(ElementKind.INTERFACE, Collections.<Modifier>emptySet())); // NOI18N
protected final TypeMirrorHandle<TypeMirror> type;
protected final String name;
protected final Kind kind;
private PatternAnalyser patternAnalyser;
/** Constructor of Pattern. The patternAnalyser is the only connetion
* to class which created this pattern.
* @param patternAnalyser The patern analayser which created this pattern.
*/
public Pattern( PatternAnalyser patternAnalyser, Kind kind,
String name, TypeMirrorHandle<TypeMirror> type ) {
this.patternAnalyser = patternAnalyser;
this.kind = kind;
this.name = name;
this.type = type;
}
public PatternAnalyser getPatternAnalyser() {
return patternAnalyser;
}
/** Gets the name of pattern.
* @return Name of the pattern.
*/
public String getName() {
return name;
}
/** Sets the name of the pattern
* @param name New name of the pattern.
*/
public abstract void setName( String name );
public abstract Image getIcon();
public String getHtmlDisplayName() {
return null;
}
/** Gets the class which declares this Pattern.
* @return Class in which this pattern is defined.
*/
public ElementHandle<TypeElement> getDeclaringClass() {
return patternAnalyser.getClassElementHandle();
}
/** Gets the type of property */
public TypeMirrorHandle<TypeMirror> getType() {
return type;
}
public Kind getKind() {
return kind;
}
public List<Pattern> getPatterns() {
if ( kind == Kind.CLASS ) {
return patternAnalyser.getPatterns();
}
else {
return Collections.<Pattern>emptyList();
}
}
/** Default behavior for destroying pattern is to do nothing
*/
public void destroy() {
}
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Pattern other = (Pattern) obj;
// if (this.type != other.type && (this.type == null || !this.type.equals(other.type))) {
// return false;
// }
if (this.name != other.name && (this.name == null || !this.name.equals(other.name))) {
return false;
}
if (this.kind != other.kind && (this.kind == null || !this.kind.equals(other.kind))) {
return false;
}
return true;
}
public int hashCode() {
int hash = 3;
// hash = 67 * hash + (this.type != null ? this.type.hashCode() : 0);
hash = 67 * hash + (this.name != null ? this.name.hashCode() : 0);
hash = 67 * hash + (this.kind != null ? this.kind.hashCode() : 0);
return hash;
}
public enum Kind {
CLASS, // Good for inerclasses
PROPERTY,
EVENT_SOURCE;
}
private static class NameComparator implements Comparator<Pattern> {
public int compare(Pattern p1, Pattern p2) {
return p1.name.compareToIgnoreCase(p2.name);
}
}
}