package org.eclipse.jface.tests.viewers; | |
/* | |
* Licensed Materials - Property of IBM, | |
* WebSphere Studio Workbench | |
* (c) Copyright IBM Corp 1999, 2000 | |
*/ | |
import java.util.*; | |
public class TestElement implements Cloneable { | |
TestModel fModel; | |
TestElement fContainer; | |
String fSomeName; | |
String fId; | |
Vector fChildren= new Vector(); | |
boolean fIsDeleted= false; | |
public static final String P_SOMENAME= "org.eclipse.jface.viewertest.name"; | |
public static final String P_COLUMN_1= "org.eclipse.jface.viewertest.column1"; | |
public TestElement(TestModel model, TestElement container) { | |
fModel = model; | |
fContainer = container; | |
int p = 0; | |
TestElement lastSibling = container.getLastChild(); | |
if (lastSibling != null) { | |
p = lastSibling.childId() + 1; | |
} | |
fId = container.getID() + "-" + p; | |
} | |
public TestElement(TestModel model, TestElement container, int level, int position) { | |
fModel = model; | |
fContainer = container; | |
if (container != null) | |
fId = container.getID() + "-" + position; | |
else | |
fId = Integer.toString(position); | |
fSomeName = "name-" + position; | |
if (level < model.getNumLevels()) { | |
for (int i = 0; i < model.getNumChildren(); i++) { | |
fChildren.add(new TestElement(model, this, level + 1, i)); | |
} | |
} | |
} | |
public TestElement addChild(int event) { | |
TestElement element= new TestElement(fModel, this); | |
element.fSomeName= "added"; | |
addChild(element, new TestModelChange(event, this, element)); | |
return element; | |
} | |
public TestElement addChild(TestElement element, TestModelChange change) { | |
fChildren.add(element); | |
fModel.fireModelChanged(change); | |
return element; | |
} | |
public void addChildren(TestElement[] elements, TestModelChange change) { | |
for (int i= 0; i < elements.length; i++) | |
fChildren.add(elements[i]); | |
fModel.fireModelChanged(change); | |
} | |
public TestElement[] addChildren(int event) { | |
TestElement elements[]= new TestElement[] { | |
new TestElement(fModel, this), | |
new TestElement(fModel, this) | |
}; | |
elements[0].fSomeName= "added1"; | |
elements[1].fSomeName= "added2"; | |
addChildren(elements, new TestModelChange(event, this, elements)); | |
return elements; | |
} | |
public TestElement basicAddChild() { | |
TestElement element= new TestElement(fModel, this); | |
element.fSomeName= "added"; | |
fChildren.add(element); | |
return element; | |
} | |
public void basicDeleteChild(TestElement element) { | |
fChildren.remove(element); | |
element.fIsDeleted= true; | |
} | |
private int childId() { | |
String id= fId.substring(fId.lastIndexOf("-")+1); | |
return Integer.parseInt(id); | |
} | |
public Object clone() { | |
try { | |
return super.clone(); | |
} | |
catch (CloneNotSupportedException e) { | |
throw new Error(); // should not happen | |
} | |
} | |
static public TestElement createModel(int numLevels, int numChildren) { | |
return new TestElement(new TestModel(numLevels, numChildren), null, 0, 0); | |
} | |
public void deleteChild(TestElement element) { | |
deleteChild(element, new TestModelChange(TestModelChange.REMOVE, this, element)); | |
} | |
public void deleteChild(TestElement element, TestModelChange change) { | |
basicDeleteChild(element); | |
fModel.fireModelChanged(change); | |
} | |
public void deleteChildren() { | |
for (int i = fChildren.size() - 1; i >= 0; i--) { | |
TestElement te = (TestElement) fChildren.elementAt(i); | |
fChildren.remove(te); | |
te.fIsDeleted = true; | |
} | |
fModel.fireModelChanged(new TestModelChange(TestModelChange.STRUCTURE_CHANGE, this)); | |
} | |
public void deleteSomeChildren() { | |
for (int i = fChildren.size() - 1; i >= 0; i -= 2) { | |
TestElement te = (TestElement) fChildren.elementAt(i); | |
fChildren.remove(te); | |
te.fIsDeleted = true; | |
} | |
fModel.fireModelChanged(new TestModelChange(TestModelChange.STRUCTURE_CHANGE, this)); | |
} | |
public boolean equals(Object arg) { | |
if (!(arg instanceof TestElement)) | |
return false; | |
TestElement element= (TestElement)arg; | |
return element.fId.equals(fId); | |
} | |
public TestElement getChildAt(int i) { | |
return (TestElement) fChildren.elementAt(i); | |
} | |
public int getChildCount() { | |
return fChildren.size(); | |
} | |
public TestElement getContainer() { | |
return fContainer; | |
} | |
public TestElement getFirstChild() { | |
if (fChildren.size() > 0) | |
return (TestElement)fChildren.elementAt(0); | |
return null; | |
} | |
public String getID() { | |
return fId; | |
} | |
public String getLabel() { | |
return fSomeName; | |
} | |
public TestElement getLastChild() { | |
int size = fChildren.size(); | |
if (size > 0) | |
return (TestElement) fChildren.elementAt(size - 1); | |
return null; | |
} | |
public TestModel getModel() { | |
return fModel; | |
} | |
public int hashCode() { | |
return fId.hashCode(); | |
} | |
public boolean isDeleted() { | |
return fIsDeleted; | |
} | |
public void setLabel(String label) { | |
fSomeName= label; | |
fModel.fireModelChanged(new TestModelChange(TestModelChange.NON_STRUCTURE_CHANGE, this)); | |
} | |
public boolean testDeleted() { | |
if (fIsDeleted) | |
return true; | |
if (fContainer != null) | |
return fContainer.testDeleted(); | |
return false; | |
} | |
public String toString() { | |
return getID() + " " + getLabel(); | |
} | |
} |