/*
* -----------------------------------------------------------------------------
*
* <p><b>License and Copyright: </b>The contents of this file are subject to the
* Mozilla Public License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of the License
* at <a href="http://www.mozilla.org/MPL">http://www.mozilla.org/MPL/.</a></p>
*
* <p>Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.</p>
*
* <p>The entire file consists of original code. Copyright © 2003, 2004
* Tufts University. All rights reserved.</p>
*
* -----------------------------------------------------------------------------
*/
/*******
** VuePropertyDescriptor
**
**
*********/
package tufts.vue.beans;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.lang.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.*;
import tufts.vue.*;
/**
* VueBeans
* This class holds a list of properties and balues for a
* given object and can manage chagnes to properties.
*
**/
public class VueBeans {
//////////////
// Fields
/////////////
/** a list of property mappers **/
static private Map sPropertyMappers = new HashMap();
/** proeprty map **/
private Map mDiscriptors = new HashMap();
//////////////////
// Constructor
///////////////////
public VueBeans() {
super();
}
/////////////////////
// Methods
////////////////////
/**
* getBeanInfo
* Looks up the VueBeanInfo based on the class or tries to build one
* from scratch
* $param pObject = the object to get info about
* @return VueBeanInfo the info
**/
static public VueBeanInfo getBeanInfo( Object pObject) {
VuePropertyMapper mapper = null;
VueBeanInfo info = null;
mapper = getPropertyMapper( pObject);
if( mapper != null) {
info = mapper.getBeanInfo( pObject);
}
return info;
}
/**
* getPropertyValue
* Returns a property value given the object and the property name
* @param pObject - the object
* @param String the name
* @return the vuale
**/
static public Object getPropertyValue( Object pObject, String pName) {
Object value = null;
VuePropertyManager mgr = VuePropertyManager.getManager();
VuePropertyMapper mapper = mgr.getPropertyMapper( pObject);
if( mapper != null) {
value = mapper.getPropertyValue( pObject, pName);
}
return value;
}
/**
* setPropertyValue
* Sets the value for the given the object and the property name
* @param pObject - the object
* @param String the name
* @param pValue the value
**/
static public void setPropertyValue( Object pObject, String pName, Object pValue) {
VuePropertyManager mgr = VuePropertyManager.getManager();
VuePropertyMapper mapper = mgr.getPropertyMapper( pObject);
if( mapper != null) {
mapper.setPropertyValue( pObject, pName, pValue);
}
else {
System.out.println(" No mapper fournd for class: "+pObject.getClass().getName() );
}
}
/**
* registerPropertyMapper
* THis method registers a property mapper for a given class
* @param Class the class
* @param VueProeprtyMapper - the mapper for the class
**/
static public void registerPropertyMapper( Class pClass, VuePropertyMapper pMapper) {
sPropertyMappers.put( pClass.getName(), pMapper);
}
/**
* getPropertyMapper
* This method returns a VuePropertyMapper for the given object.
* If not mapper can be found for the object, null is returned.
* @param Object - the object in question
* @return VuePropertyMapper teh mapper for the given object
**/
static public VuePropertyMapper getPropertyMapper( Object pObject) {
VuePropertyManager mgr = VuePropertyManager.getManager();
VuePropertyMapper mapper = mgr.getPropertyMapper( pObject);
return mapper;
}
/**
* getState
* This returns a VueBeanState built from the passed bean.
* @param Object the bean to generate a BeanState
* @return VueBeanState - a property value set of the bean
**/
static public VueBeanState getState( Object pBean) {
VueBeanState state = new VueBeanState();
state.initializeFrom( pBean);
return state;
}
static public void applyPropertyValueToSelection(LWSelection s, String pName, Object pValue)
{
if (s == null || s.isEmpty())
return;
Iterator i = s.iterator();
// FIX: THis may be a bad assumption that the mapper will work for
// all items in the selection. [it should apply properties as it can]
while (i.hasNext()) {
LWComponent c = (LWComponent) i.next();
if (c instanceof LWLink && pName == LWKey.FillColor.name)
continue;
if (tufts.vue.DEBUG.SELECTION) System.out.println("applying " + pName + " to " + c);
c.setProperty(pName, pValue);
//VueBeans.setPropertyValue(c, pName, pValue);
}
}
}