/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by 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:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.model;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.swt.graphics.Image;
import org.jboss.tools.common.meta.XModelEntity;
import org.jboss.tools.common.meta.constraint.XProperty;
import org.jboss.tools.common.model.filesystems.XFileObject;
/**
* Common interface for all objects in XModel.
* At present is intended for immediate implementation
* by only XModelObjectImpl, other implementations should
* subclass it.
*
* @author glory
*/
public interface XModelObject extends XProperty, XFileObject, IAdaptable {
/**
* Returns model that created this model object.
* @return
*/
public XModel getModel();
/**
* Returns Meta Data entity that defines the structure and
* other functionality of this model object.
* @return entity object
*/
public XModelEntity getModelEntity();
/**
* Returns parent model object.
*
* @return parent model object or null.
*/
public XModelObject getParent();
/**
* Returns true if either this object is a root or it has
* root as its ancestor, and false otherwise.
*
* @return
*/
public boolean isActive();
/**
* Returns value of named attribute.
*
* @param name
* @return
*/
public String getAttributeValue(String name);
/**
* Changes value of named attribute, if accepted by
* constraints, and notifies model listeners.
*
* @param name
* @param value
* @return actual value set to attribute.
*/
public String setAttributeValue(String name, String value);
/**
* Returns true if user input may be used to modify the object.
* It is so usually when file is writable.
* @return
*/
public boolean isObjectEditable();
/**
* Returns true if user input may be used to modify the attribute.
* Sometimes, if it is advisable to change the attribute with
* specific wizard and to restrict user access to the attribute
* in the property view, it is preferable to return false.
*
* @param name
* @return
*/
public boolean isAttributeEditable(String name);
/**
* Returns true if object has at least one child object and
* false otherwise.
*
* @return boolean
*/
public boolean hasChildren();
/**
* Returns array of children objects.
*
* @return array of model objects
*/
public XModelObject[] getChildren();
/**
* Returns child model object that has index i in the array
* returned by getChildren() method.
*
* @param i
* @return
*/
public XModelObject getChildAt(int i);
/**
* Returns array of children with specified entity name.
* @param entityName
*
* @return array of model objects
*/
public XModelObject[] getChildren(String entityName);
/**
* Returns child object by path that contains path parts
* separated by XModelObjectConstants.SEPARATOR.
*
* @param path
* @return child model object or null
*/
public XModelObject getChildByPath(String path);
/**
* Returns array of children model objects
* to be processed by the loader.
*
* @return array of model objects
*/
public XModelObject[] getChildrenForSave();
/**
* Returns a path part that makes this object unique
* in the set of children of its parent. This model object
* can be obtained from its parent by method getChildByPath()
* with value returned by this method.
*
* @return path part
*/
public String getPathPart();
/**
* Returns path that equals to
* - empty string for the model root;
* - path part for an immediate child of the model root;
* - "root:" plus path part for an extra model root;
* - parent path plus separator XModelObjectConstants.SEPARATOR plus path part for any
* other model object.
* @return
*/
public String getPath();
/**
* Adds child model object to this model object.
* Returns true if method successes and false if it fails.
* Method fails if
* - entity of child object is not a child entity of this object;
* - this object has a child with the same path part as that of
* the parameter.
*
* @param object
* @return boolean
*/
public boolean addChild(XModelObject object);
/**
* Removes model object from children set of this object,
* if it was its child, and does nothing otherwise.
* If object is removed from parent children, its method
* getParent() returns null.
*
* @param child
*/
public void removeChild(XModelObject child);
/**
* Convenience method that checks if the object
* has a parent, and removes this object from its children.
*/
public void removeFromParent();
/**
* Creates copy of this object. Same as copy(true).
* @return
*/
public XModelObject copy();
/**
* Creates copy of this object. If transform=true,
* Entity of copied object may differ from entity
* of this object.
*
* @param transform
* @return
*/
public XModelObject copy(boolean transform);
/**
* Creates copy of this object. Same as copy(false, level).
* @return
*/
public XModelObject copy(int level);
/**
* Creates copy of this object. If transform=true,
* Entity of copied object may differ from entity
* of this object. If level = 0, children are not copied,
* if level > 0 children are copied as copy(transform, level - 1).
* @param transform
* @param level
* @return
*/
public XModelObject copy(boolean transform, int level);
/**
* Returns flag modified.
* If true object is supposed to be changed.
*
* @return
*/
public boolean isModified();
/**
* Flips flag modified.
* @param b
*/
public void setModified(boolean b);
/**
* Returns string to be presented by tools to user.
*
* @return
*/
public String getPresentationString();
/**
* Returns id to be used for constracting image.
* @return
*/
public String getMainIconName();
/**
* Returns image to be presented by tools to user.
* @return
*/
public Image getImage();
/**
*
* @param types
* @return
*/
public Image getImage(String[] types);
/**
* Returns counter of changes to be used by classes,
* that cache data from this object, to decide if
* cached data is up to date.
*
* @return
*/
public long getTimeStamp();
public long getLastModificationTimeStamp();
/**
* Compares this object to another object. Returns true if all
* of the following is true:
* - entity names are equal;
* - attributes with property copyable=true are equal;
* - arrays returned by method getChildrenForSave()
* have equal lengths and for each index value corresponding
* model objects are equal with respect to this method.
*
* @param o
* @return
*/
public boolean isEqual(XModelObject o);
/**
* Convenience method that notifies model listeners that
* this object is changed.
*
* @param details
*/
public void fireObjectChanged(Object details);
/**
* Returns IMarker.SEVERITY_INFO or IMarker.SEVERITY_WARNING or
* IMarker.SEVERITY_ERROR
*
* @return
*/
public int getErrorState();
/**
* Returns true there is an error marker registered to
* the relevant resource and associated with this attribute.
*
* @param attributeName
* @return
*/
public boolean getAttributeErrorState(String attributeName);
/**
* Notifies this object that it or its has
* errors or only warnings or none of them.
* This method is intended to be called only by
* XMarkerManager and by implementations of
* auxiliary model objects that need to compute
* their error state by checking error states
* of objects that are not their children.
*
* @param b
*/
public void setErrorState(int b);
/**
* Returns number of children that have error markers
* associated with them.
*
* @return
*/
public int getErrorChildCount();
/**
* Returns number of children that have only warning
* markers associated with them.
*
* @return
*/
public int getWarningChildCount();
}