blob: dd41ed57a01702ba086a34b26a90a4757f770ac1 [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.j2ee.sun.ddloaders.multiview;
import java.util.LinkedList;
import org.netbeans.modules.j2ee.sun.dd.api.ASDDVersion;
import org.netbeans.modules.j2ee.sun.dd.api.RootInterface;
import org.netbeans.modules.j2ee.sun.ddloaders.SunDescriptorDataObject;
import org.netbeans.modules.xml.multiview.SectionNode;
import org.netbeans.modules.xml.multiview.XmlMultiViewDataSynchronizer;
import org.netbeans.modules.xml.multiview.ui.SectionNodeView;
import org.openide.nodes.Node;
import org.openide.util.RequestProcessor;
/**
* @author Peter Williams
*/
public class DDSectionNodeView extends SectionNodeView {
protected RootInterface rootDD;
protected ASDDVersion version;
public DDSectionNodeView(SunDescriptorDataObject dataObject) {
super(dataObject);
rootDD = dataObject.getDDRoot();
version = dataObject.getASDDVersion();
}
/** API to set the child nodes (subpanels) of this view node without creating
* an extra top level root node.
*/
public void setChildren(SectionNode [] children) {
int size = children.length;
if(size > 0) {
setRootNode(children[0]);
if(--size > 0) {
SectionNode [] remainingNodes = new SectionNode[size];
System.arraycopy(children, 1, remainingNodes, 0, size);
Node rootNode = getRoot();
rootNode.getChildren().add(remainingNodes);
for(int i = 0; i < size; i++) {
addSection(remainingNodes[i].getSectionNodePanel());
}
}
}
}
public void setChildren(LinkedList<SectionNode> children) {
if(children.peek() != null) {
SectionNode firstNode = children.removeFirst();
setRootNode(firstNode);
if(children.peek() != null) {
SectionNode [] remainingNodes = children.toArray(new SectionNode[0]);
Node rootNode = getRoot();
rootNode.getChildren().add(remainingNodes);
for(int i = 0; i < remainingNodes.length; i++) {
addSection(remainingNodes[i].getSectionNodePanel());
}
}
}
}
public XmlMultiViewDataSynchronizer getModelSynchronizer() {
return ((SunDescriptorDataObject) getDataObject()).getModelSynchronizer();
}
// ------------------------------------------------------------------------
// Overrides required to properly support multiple rootNodes
// Taken from SectionNodeView and enhanced for to handle rootNode[]
// ------------------------------------------------------------------------
private final RequestProcessor.Task ddRefreshTask = RequestProcessor.getDefault().create(new Runnable() {
public void run() {
refreshView();
}
});
private static final int DD_REFRESH_DELAY = 20;
@Override
public void refreshView() {
Node [] rootNodes = getRoot().getChildren().getNodes();
if(rootNodes != null) {
for(Node n: rootNodes) {
if(n instanceof SectionNode) {
((SectionNode) n).refreshSubtree();
}
}
}
}
@Override
public void scheduleRefreshView() {
ddRefreshTask.schedule(DD_REFRESH_DELAY);
}
@Override
public void dataModelPropertyChange(Object source, String propertyName, Object oldValue, Object newValue) {
// System.out.println("DDSectionNodeView [" + this.getClass().getSimpleName() + "] .dataModelPropertyChange: " +
// source + ", " + propertyName + ", " + oldValue + ", " + newValue);
Node [] rootNodes = getRoot().getChildren().getNodes();
if(rootNodes != null) {
for(Node n: rootNodes) {
if(n instanceof SectionNode) {
((SectionNode) n).dataModelPropertyChange(source, propertyName, oldValue, newValue);
}
}
}
}
// /** Override this if required by derived classes. Called before refreshView()
// * to ensure child nodes are up to date.
// */
// protected void checkChildren() {
// // As long as NamedGroups have setExpanded = true, this is required to
// // ensure initialization of the child nodes in the group.
// final Children children = getRoot().getChildren();
// final Node[] nodes = children.getNodes();
// for(Node node: nodes) {
// if(node instanceof NamedBeanGroupNode) {
// System.out.println(node.getClass().getSimpleName() + ".checkChildren() called by " + this.getClass().getSimpleName() + ".checkChildren()");
// ((NamedBeanGroupNode) node).checkChildren(null);
// }
// }
// }
}