/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenFlexo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openflexo.inspector.model;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Vector;
import java.util.logging.Logger;
import org.openflexo.logging.FlexoLogger;
public class InspectorModel extends ModelObject {
private static final Logger logger = FlexoLogger.getLogger(InspectorModel.class.getPackage().getName());
public String inspectorName;
public String title;
private InspectorModel superInspector;
public String superInspectorName;
public String inspectedClassName;
private Hashtable<Integer, TabModel> tabs;
public Vector<InspectorModel> extendingInspectors;
public InspectorModel() {
super();
tabs = new Hashtable<Integer, TabModel>();
extendingInspectors = new Vector<InspectorModel>();
}
public String getWidgetTypeForProperty(String propName) {
Iterator it = tabs.values().iterator();
while (it.hasNext()) {
String answer = ((TabModel) it.next()).getWidgetTypeForProperty(propName);
if (answer != null) {
return answer;
}
}
return null;
}
/**
* @param depends
* @return
*/
public PropertyModel getPropertyNamed(String depends) {
Iterator it = tabs.values().iterator();
while (it.hasNext()) {
PropertyModel answer = ((TabModel) it.next()).getPropertyNamed(depends);
if (answer != null) {
return answer;
}
}
if (getSuperInspector() != null) {
return getSuperInspector().getPropertyNamed(depends);
}
return null;
}
public void debug() {
// System.out.println("InspectorModel: "+hashCode());
Iterator it = tabs.values().iterator();
while (it.hasNext()) {
TabModel tabModel = (TabModel) it.next();
System.out.println("----------------- " + tabModel.name + "/" + tabModel.hashCode() + " -----------------");
for (Enumeration en = tabModel.getProperties().elements(); en.hasMoreElements();) {
PropertyModel p = (PropertyModel) en.nextElement();
System.out.println(p.name + "/" + p.hashCode() + " tabModel: " + p.getTabModel().name + p.getTabModel().hashCode()
+ " inspectorModel: " + p.getInspectorModel().hashCode());
}
}
}
public PropertyModel getInfo() {
Enumeration en = getTabs().elements();
while (en.hasMoreElements()) {
TabModel tm = (TabModel) en.nextElement();
if (tm.name != null && tm.name.equals("Bindings")) {
Enumeration en1 = tm.getProperties().elements();
while (en1.hasMoreElements()) {
PropertyModel pm = (PropertyModel) en1.nextElement();
if (pm.name != null && pm.name.equals("additionalBindings")) {
return pm;
}
}
}
}
return null;
}
public Hashtable<Integer, TabModel> getTabs() {
return tabs;
}
public void setTabs(Hashtable<Integer, TabModel> t) {
this.tabs = t;
}
public void setTabForKey(TabModel tabModel, Integer key) {
tabs.put(key, tabModel);
tabModel.setInspectorModel(this);
}
public void removeTabWithKey(Integer key) {
tabs.remove(key);
}
/**
* @param superInspector
* the superInspector to set
*/
public void setSuperInspector(InspectorModel superInspector) {
this.superInspector = superInspector;
superInspector.extendingInspectors.add(this);
}
/**
* @return the superInspector
*/
public InspectorModel getSuperInspector() {
return superInspector;
}
public Vector<PropertyModel> getAllPropertyModel() {
Vector<PropertyModel> returned = new Vector<PropertyModel>();
for (Enumeration en = getTabs().elements(); en.hasMoreElements();) {
TabModel tab = (TabModel) en.nextElement();
for (Enumeration en2 = tab.getProperties().elements(); en2.hasMoreElements();) {
PropertyModel property = (PropertyModel) en2.nextElement();
returned.add(property);
}
}
return returned;
}
}