in netbeansintegration/tags/4.0.5.alpha/src/org/openoffice/extensions/util/typebrowser/logic/TypeBrowserChildren.java [68:222]
protected void addNotify() {
TypeNode node = (TypeNode)getNode();
String name = node.getHierarchicalName();
if (name.equals("root")) name = ""; // NOI18N
String[] types = TypeNode.getDisplayedTypes();
Vector<TypeData> newTypes = new Vector<TypeData>();
// primitive data types, if desired
if (TypeNode.displaysType(UnoTypes.SIMPLE) && name.length() == 0) {
for (int i=1; i<UnoTypes.SIMPLE_TYPE_TAGS.length; i++) { // do not take void...
String newType = UnoTypes.SIMPLE_TYPE_TAGS[i];
newTypes.add(new TypeData(newType, UnoTypes.SIMPLE_TYPE));
}
}
// additional interfaces and services that were own designed
NbNodeObject[] addNodes = TypeNode.getDesignedTypes();
if (addNodes != null) {
for (int i=0; i<addNodes.length; i++) {
if (name.length() == 0) { // first module under root
int dataType = UnoTypes.MODULE_TYPE + UnoTypes.OWN_DESIGN_TYPE;
if (isIntTypeInStringTypes(addNodes[i].getType(), types)) {
String newType = null;
try {
newType = ((PropertyContainer)addNodes[i]).getSimpleProperty(Service.PROPERTY_CONTAINER_PACKAGE);
int index = newType.indexOf('.');
if (index > 0) {
newType = newType.substring(0, index);
}
TypeData d = new TypeData(newType, dataType);
if (!contains(newTypes, d)) {
newTypes.add(d);
}
} catch (UnknownOpenOfficeOrgPropertyException ex) {
LogWriter.getLogWriter().printStackTrace(ex);
}
}
}
else {
if (isIntTypeInStringTypes(addNodes[i].getType(), types)) {
String newType = null;
try {
newType = ((PropertyContainer)addNodes[i]).getSimpleProperty(Service.PROPERTY_CONTAINER_PACKAGE);
if (newType.startsWith(name)) {
int newLength = name.length() + 1;
int nextDotIndex = -2;
if (newLength <= newType.length()) { // this mens we have the complete paackage added
nextDotIndex = newType.indexOf('.', newLength);
}
int dataType = UnoTypes.MODULE_TYPE + UnoTypes.OWN_DESIGN_TYPE;
if (nextDotIndex == -2) { // complete package is there: add srvice/ifc name now
String simpleName = ((PropertyContainer)addNodes[i]).getSimpleProperty(Service.PROPERTY_CONTAINER_NAME);
if (newType.indexOf(simpleName) == -1) {
newType = newType.concat(".").concat(simpleName); // NOI18N
int nodesType = addNodes[i].getType();
if (nodesType == NbNodeObject.SERVICE_TYPE) {
dataType = UnoTypes.SERVICE_TYPE + UnoTypes.OWN_DESIGN_TYPE;
}
else if (nodesType == NbNodeObject.INTERFACE_TYPE) {
dataType = UnoTypes.INTERFACE_TYPE + UnoTypes.OWN_DESIGN_TYPE;
}
else if (nodesType == NbNodeObject.STRUCT_TYPE) {
dataType = UnoTypes.STRUCT_TYPE + UnoTypes.OWN_DESIGN_TYPE;
}
else if (nodesType == NbNodeObject.POLY_STRUCT_TYPE) {
dataType = UnoTypes.POLY_STRUCT_TYPE + UnoTypes.OWN_DESIGN_TYPE;
}
else if (nodesType == NbNodeObject.EXCEPTION_TYPE) {
dataType = UnoTypes.EXCEPTION_TYPE + UnoTypes.OWN_DESIGN_TYPE;
}
}
}
else if (nextDotIndex != -1) {
newType = newType.substring(0, nextDotIndex);
} // else: keep the complete package name
TypeData d = new TypeData(newType, dataType);
if (!contains(newTypes, d)) {
newTypes.add(d);
}
}
} catch (UnknownOpenOfficeOrgPropertyException ex) {
LogWriter.getLogWriter().printStackTrace(ex);
}
}
}
}
}
// types from the Office
try {
types = TypeNode.getDisplayedOfficeTypes();
if (types != null) {
Object typeClassArray = wrapper.getArray(
"com.sun.star.uno.TypeClass", new int[]{types.length}); // NOI18N
for (int i=0; i<types.length; i++) {
wrapper.setArrayValue(
typeClassArray, i, wrapper.getStaticField("com.sun.star.uno.TypeClass", types[i])); // NOI18N
}
Object tdSearchDepth = wrapper.getStaticField(
"com.sun.star.reflection.TypeDescriptionSearchDepth", "ONE"); // NOI18N
// XTypeDescriptionEnumeration
Object xTDEnumeration = wrapper.executeMethod(
xTDMgr, "createTypeDescriptionEnumeration", // NOI18N
new Object[]{name, typeClassArray, tdSearchDepth});
while ( wrapper.executeBooleanMethod(
xTDEnumeration, "hasMoreElements", null) ) { // NOI18N
Object xTD = wrapper.executeMethod(xTDEnumeration, "nextTypeDescription", null); // NOI18N
Object typeClass = wrapper.executeMethod(xTD, "getTypeClass", null); // NOI18N
int dataType = UnoTypes.MODULE_TYPE;
if (typeClass == wrapper.getStaticField("com.sun.star.uno.TypeClass", UnoTypes.SERVICE)) { // NOI18N
dataType = UnoTypes.SERVICE_TYPE;
}
if (typeClass == wrapper.getStaticField("com.sun.star.uno.TypeClass", UnoTypes.INTERFACE)) { // NOI18N
dataType = UnoTypes.INTERFACE_TYPE;
}
if (typeClass == wrapper.getStaticField("com.sun.star.uno.TypeClass", UnoTypes.EXCEPTION)) { // NOI18N
dataType = UnoTypes.EXCEPTION_TYPE;
}
if (typeClass == wrapper.getStaticField("com.sun.star.uno.TypeClass", UnoTypes.STRUCT)) { // NOI18N
dataType = UnoTypes.STRUCT_TYPE;
} // 2do: poly struct?
String newType = (String)wrapper.executeMethod(xTD, "getName", null); // NOI18N
TypeData d = new TypeData(newType, dataType);
if (!contains(newTypes, d)) {
newTypes.add(d);
}
}
}
TypeData[] typeObjects = newTypes.toArray(new TypeData[newTypes.size()]);
Arrays.sort(typeObjects, new Comparator<TypeData>() {
public int compare(TypeData o1, TypeData o2) {
boolean o1isModule = (o1.getType() & 127) == UnoTypes.MODULE_TYPE;
boolean o2isModule = (o2.getType() & 127) == UnoTypes.MODULE_TYPE;
if ((o1isModule && o2isModule) ||
(!o1isModule && !o2isModule)) {
return o1.getName().compareTo(o2.getName());
}
else {
// keep simple types as first position
if (o1isModule || (o1.getType() & 127) == UnoTypes.SIMPLE_TYPE) return -1;
if (o2isModule || (o2.getType() & 127) == UnoTypes.SIMPLE_TYPE) return 1;
}
return 0;
}
});
setKeys(typeObjects);
}
catch (Exception e) {
LogWriter.getLogWriter().printStackTrace(e);
// just do not set keys!
}
}