/* * Copyright 2000-2012 JetBrains s.r.o. * * Licensed 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 com.intellij.designer.model; import com.intellij.designer.palette.DefaultPaletteItem; import com.intellij.designer.palette.PaletteItem; import com.intellij.designer.propertyTable.IPropertyDecorator; import com.intellij.openapi.util.IconLoader; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.util.Collections; import java.util.List; /** * @author Alexander Lobas */ public class MetaModel { private final Class<RadComponent> myModel; private Class<RadLayout> myLayout; private final String myTarget; private final String myTag; private PaletteItem myPaletteItem; private String myTitle; private String myIconPath; private Icon myIcon; private String myCreation; private boolean myDelete = true; private List<String> myInplaceProperties = Collections.emptyList(); private List<String> myTopProperties = Collections.emptyList(); private List<String> myNormalProperties = Collections.emptyList(); private List<String> myImportantProperties = Collections.emptyList(); private List<String> myExpertProperties = Collections.emptyList(); private List<String> myDeprecatedProperties = Collections.emptyList(); private List<MetaModel> myMorphingModels = Collections.emptyList(); public MetaModel(Class<RadComponent> model, String target, String tag) { myModel = model; myTarget = target; myTag = tag; } public Class<RadComponent> getModel() { return myModel; } public Class<RadLayout> getLayout() { return myLayout; } public void setLayout(Class<RadLayout> layout) { myLayout = layout; } public String getTarget() { return myTarget; } public String getTag() { return myTag; } public boolean isTag(@NotNull String tag) { return tag.equals(myTag); } public boolean isTag(String... tags) { return ArrayUtil.contains(myTag, tags); } public String getCreation() { return myCreation; } public void setCreation(String creation) { myCreation = creation; } public boolean canDelete() { return myDelete; } public void setDelete(boolean delete) { myDelete = delete; } public String getTitle() { return myTitle; } public Icon getIcon() { if (myIcon == null) { if (myIconPath == null) { return myPaletteItem == null ? null : myPaletteItem.getIcon(); } myIcon = IconLoader.findIcon(myIconPath, myModel); } return myIcon; } public void setPresentation(String title, String iconPath) { myTitle = title; myIconPath = iconPath; myIcon = null; } public PaletteItem getPaletteItem() { return myPaletteItem; } public void setPaletteItem(@NotNull DefaultPaletteItem paletteItem) { myPaletteItem = paletteItem; myPaletteItem.setMetaModel(this); } public List<MetaModel> getMorphingModels() { return myMorphingModels; } public void setMorphingModels(List<MetaModel> morphingModels) { myMorphingModels = morphingModels; } public List<String> getInplaceProperties() { return myInplaceProperties; } public void setInplaceProperties(List<String> inplaceProperties) { myInplaceProperties = inplaceProperties; } public List<String> getTopProperties() { return myTopProperties; } public void setTopProperties(List<String> topProperties) { myTopProperties = topProperties; } public void setNormalProperties(List<String> normalProperties) { myNormalProperties = normalProperties; } public boolean isImportantProperty(String name) { return myImportantProperties.contains(name); } public void setImportantProperties(List<String> importantProperties) { myImportantProperties = importantProperties; } public boolean isExpertProperty(String name) { return myExpertProperties.contains(name); } public void setExpertProperties(List<String> expertProperties) { myExpertProperties = expertProperties; } public boolean isDeprecatedProperty(String name) { return myDeprecatedProperties.contains(name); } public void setDeprecatedProperties(List<String> deprecatedProperties) { myDeprecatedProperties = deprecatedProperties; } public void decorate0(Property property, String name) { property.setImportant(isImportantProperty(name)); property.setExpert(isExpertProperty(name)); property.setDeprecated(isDeprecatedProperty(name)); } public void decorate(Property property, String name) { decorate0(property, name); if (property instanceof IPropertyDecorator) { ((IPropertyDecorator)property).decorate(this); } } public Property decorateWithOverride(Property property) { String name = property.getName(); if (myNormalProperties.contains(name) || myImportantProperties.contains(name) || myExpertProperties.contains(name) || myDeprecatedProperties.contains(name)) { property = property.createForNewPresentation(); decorate(property, name); } return property; } }