| /* |
| * Copyright 2000-2009 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.uiDesigner.lw; |
| |
| import com.intellij.uiDesigner.UIFormXmlConstants; |
| import com.intellij.uiDesigner.compiler.AlienFormFileException; |
| import com.intellij.uiDesigner.compiler.UnexpectedFormElementException; |
| import com.intellij.uiDesigner.compiler.Utils; |
| import org.jdom.Element; |
| |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| |
| |
| /** |
| * @author Anton Katilin |
| * @author Vladimir Kondratyev |
| */ |
| public final class LwRootContainer extends LwContainer implements IRootContainer{ |
| private String myClassToBind; |
| private String myMainComponentBinding; |
| private final ArrayList myButtonGroups = new ArrayList(); |
| private final ArrayList myInspectionSuppressions = new ArrayList(); |
| |
| public LwRootContainer() throws Exception{ |
| super("javax.swing.JPanel"); |
| myLayoutSerializer = XYLayoutSerializer.INSTANCE; |
| } |
| |
| public String getMainComponentBinding(){ |
| return myMainComponentBinding; |
| } |
| |
| public String getClassToBind(){ |
| return myClassToBind; |
| } |
| |
| public void setClassToBind(final String classToBind) { |
| myClassToBind = classToBind; |
| } |
| |
| public void read(final Element element, final PropertiesProvider provider) throws Exception { |
| if (element == null) { |
| throw new IllegalArgumentException("element cannot be null"); |
| } |
| if (!Utils.FORM_NAMESPACE.equals(element.getNamespace().getURI())) { |
| throw new AlienFormFileException(); |
| } |
| if(!"form".equals(element.getName())){ |
| throw new UnexpectedFormElementException("unexpected element: "+element); |
| } |
| |
| setId("root"); |
| |
| myClassToBind = element.getAttributeValue(UIFormXmlConstants.ATTRIBUTE_BIND_TO_CLASS); |
| |
| // Constraints and properties |
| for(Iterator i=element.getChildren().iterator(); i.hasNext();){ |
| final Element child = (Element)i.next(); |
| if (child.getName().equals(UIFormXmlConstants.ELEMENT_BUTTON_GROUPS)) { |
| readButtonGroups(child); |
| } |
| else if (child.getName().equals(UIFormXmlConstants.ELEMENT_INSPECTION_SUPPRESSIONS)) { |
| readInspectionSuppressions(child); |
| } |
| else { |
| final LwComponent component = createComponentFromTag(child); |
| addComponent(component); |
| component.read(child, provider); |
| } |
| } |
| |
| myMainComponentBinding = element.getAttributeValue("stored-main-component-binding"); |
| } |
| |
| private void readButtonGroups(final Element element) { |
| for(Iterator i=element.getChildren().iterator(); i.hasNext();){ |
| final Element child = (Element)i.next(); |
| LwButtonGroup group = new LwButtonGroup(); |
| group.read(child); |
| myButtonGroups.add(group); |
| } |
| } |
| |
| private void readInspectionSuppressions(final Element element) { |
| for(Iterator i=element.getChildren().iterator(); i.hasNext();){ |
| final Element child = (Element)i.next(); |
| String inspectionId = LwXmlReader.getRequiredString(child, UIFormXmlConstants.ATTRIBUTE_INSPECTION); |
| String componentId = LwXmlReader.getString(child, UIFormXmlConstants.ATTRIBUTE_ID); |
| myInspectionSuppressions.add(new LwInspectionSuppression(inspectionId, componentId)); |
| } |
| } |
| |
| public IButtonGroup[] getButtonGroups() { |
| return (LwButtonGroup[])myButtonGroups.toArray(new LwButtonGroup[myButtonGroups.size()]); |
| } |
| |
| public String getButtonGroupName(IComponent component) { |
| for(int i=0; i<myButtonGroups.size(); i++) { |
| LwButtonGroup group = (LwButtonGroup) myButtonGroups.get(i); |
| final String[] ids = group.getComponentIds(); |
| for(int j=0; j<ids.length; j++) { |
| if (ids [j].equals(component.getId())) { |
| return group.getName(); |
| } |
| } |
| } |
| return null; |
| } |
| |
| public String[] getButtonGroupComponentIds(String groupName) { |
| for(int i=0; i<myButtonGroups.size(); i++) { |
| LwButtonGroup group = (LwButtonGroup) myButtonGroups.get(i); |
| if (group.getName().equals(groupName)) { |
| return group.getComponentIds(); |
| } |
| } |
| throw new IllegalArgumentException("Cannot find group " + groupName); |
| } |
| |
| public boolean isInspectionSuppressed(final String inspectionId, final String componentId) { |
| for (Iterator iterator = myInspectionSuppressions.iterator(); iterator.hasNext();) { |
| LwInspectionSuppression suppression = (LwInspectionSuppression)iterator.next(); |
| if ((suppression.getComponentId() == null || suppression.getComponentId().equals(componentId)) && |
| suppression.getInspectionId().equals(inspectionId)) { |
| return true; |
| } |
| } |
| return false; |
| } |
| |
| public LwInspectionSuppression[] getInspectionSuppressions() { |
| return (LwInspectionSuppression[]) myInspectionSuppressions.toArray(new LwInspectionSuppression[myInspectionSuppressions.size()]); |
| } |
| } |