/*******************************************************************************
* Copyright (c) 2011, 2012 Red Hat, Inc.
* All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
*
* @author Ivar Meikas
******************************************************************************/
package org.eclipse.bpmn2.modeler.ui.preferences;
import java.util.ArrayList;
import org.eclipse.bpmn2.modeler.core.preferences.AbstractPropertyChangeListenerProvider;
import org.eclipse.emf.ecore.ENamedElement;
public class ModelEnablementTreeEntry extends AbstractPropertyChangeListenerProvider {
private String name;
private ENamedElement element;
private Boolean enabled;
private ModelEnablementTreeEntry parent;
private ArrayList<ModelEnablementTreeEntry> children;
// "friends" are references to this ModelEnablementTreeEntry.
private ArrayList<ModelEnablementTreeEntry> friends;
private static ArrayList<ModelEnablementTreeEntry> EMPTY_LIST = new ArrayList<ModelEnablementTreeEntry>();
public ModelEnablementTreeEntry() {
}
public ModelEnablementTreeEntry(ENamedElement element, ModelEnablementTreeEntry parent) {
setElement(element);
this.parent = parent;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
if (element!=null)
return element.getName();
return name==null ? "" : name; //$NON-NLS-1$
}
public String getPreferenceName() {
if (parent == null || parent.getElement()==null) {
return getName();
} else {
return parent.getPreferenceName() + "." + getName(); //$NON-NLS-1$
}
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
public void setSubtreeEnabled(Boolean enabled) {
setEnabled(enabled);
for (ModelEnablementTreeEntry child : getChildren()) {
child.setSubtreeEnabled(enabled);
}
}
public int getSubtreeSize() {
return getSubtreeSize(this);
}
private static int getSubtreeSize(ModelEnablementTreeEntry parent) {
int size = 0;
for (ModelEnablementTreeEntry child : parent.getChildren()) {
++size;
size += getSubtreeSize(child);
}
return size;
}
public int getSubtreeEnabledCount() {
return getSubtreeEnabledCount(this);
}
private static int getSubtreeEnabledCount(ModelEnablementTreeEntry parent) {
int count = 0;
for (ModelEnablementTreeEntry child : parent.getChildren()) {
if (child.getEnabled())
++count;
count += getSubtreeEnabledCount(child);
}
return count;
}
public void setElement(ENamedElement element) {
if (element!=null)
this.name = element.getName();
this.element = element;
}
public ENamedElement getElement() {
return element;
}
public void setChildren(ArrayList<ModelEnablementTreeEntry> children) {
this.children = children;
}
public ArrayList<ModelEnablementTreeEntry> getChildren() {
if (children==null)
return EMPTY_LIST;
return children;
}
public void setParent(ModelEnablementTreeEntry parent) {
this.parent = parent;
}
public ModelEnablementTreeEntry getParent() {
return parent;
}
@Override
public String toString() {
return "ModelEnablementTreeEntry [element=" + getName() + ", enabled=" + enabled + ", children=" + children + ", parent=" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ (parent == null ? "null" : parent.getName()) + "]"; //$NON-NLS-1$ //$NON-NLS-2$
}
public boolean hasChildren() {
return children != null && children.size() > 0;
}
public boolean hasFriends() {
return friends!=null && friends.size()>0;
}
public ArrayList<ModelEnablementTreeEntry> getFriends() {
if (friends==null)
return EMPTY_LIST;
return friends;
}
public void addFriend(ModelEnablementTreeEntry friend) {
if (friend!=null) {
if (friends==null)
friends = new ArrayList<ModelEnablementTreeEntry>();
if (!friends.contains(friend))
friends.add(friend);
}
}
}