Source file: /~heha/mb-iwp/RTD-RTX-Konverter.zip/RtdImporter (Java-jBEAM)/src/rtdImporter/BasicCea2Component.java

package rtdImporter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
import java.util.Vector;

import org.asam.cea.Cea2Bus.Cea2BusIF;
import org.asam.cea.Cea2Component.Cea2ComponentIF;
import org.asam.cea.Cea2Events.Cea2BusEventIF;
import org.asam.cea.Cea2Events.Cea2BusEventListenerIF;
import org.asam.cea.Cea2Events.Cea2BusItemAvailableEventIF;
import org.asam.cea.Cea2Events.Cea2ComponentEventIF;
import org.asam.cea.Cea2Events.Cea2ComponentEventListenerIF;
import org.asam.cea.Cea2Events.Cea2ComponentPropertyChangedEventIF;
import org.asam.cea.Cea2Events.Cea2ItemDataChangedEventIF;
import org.asam.cea.Cea2Events.Cea2ItemEventIF;
import org.asam.cea.Cea2Events.Cea2ItemEventListenerIF;
import org.asam.cea.Cea2Events.Cea2ItemPropertyChangedEventIF;
import org.asam.cea.Cea2Events.Cea2ItemReplacedEventIF;
import org.asam.cea.Cea2Exceptions.Cea2ComponentNotFound;
import org.asam.cea.Cea2Exceptions.Cea2ItemNotAvailable;
import org.asam.cea.Cea2Exceptions.Cea2ListenerRejected;
import org.asam.cea.Cea2Exceptions.Cea2PropertyFixed;
import org.asam.cea.Cea2Exceptions.Cea2PropertyNotFound;
import org.asam.cea.Cea2Exceptions.Cea2VetoException;
import org.asam.cea.Cea2Items.Cea2ItemIF;
import org.asam.cea.Cea2Services.Cea2HelpServiceIF;
import org.asam.cea.Cea2Services.Cea2ItemFactoryServiceIF;
import org.asam.cea.Cea2Services.Cea2ItemSelectionServiceIF;
import org.asam.cea.Cea2Services.Cea2LogTraceServiceIF;
import org.asam.cea.Cea2Services.Cea2SystemServiceIF;
import org.asam.cea.Cea2Services.Cea2UndoServiceIF;
import org.asam.cea.Cea2Services.Cea2UnitServiceIF;
import org.asam.cea.Cea2Types.Cea2EventKind;
import org.asam.cea.Cea2Types.Cea2LogArea;
import org.asam.cea.Cea2Types.Cea2LogLevel;
import org.asam.cea.Cea2Types.Cea2PropertyIF;
import org.asam.cea.Cea2Types.Cea2ServiceType;

import com.AMS.jBEAM.EventSendingCea2ItemIF;

public abstract class BasicCea2Component implements Cea2ComponentIF, Cea2BusEventListenerIF {
	// version information
	final static String											ceaVersion					= "v1.0";

	private final static int[]									TypesOfUsedService			= new int[] {
			Cea2ServiceType.LogTraceService, Cea2ServiceType.HelpService,
			Cea2ServiceType.SystemService, Cea2ServiceType.ItemFactoryService,
			Cea2ServiceType.UnitService, Cea2ServiceType.ItemSelectionService,
			Cea2ServiceType.UndoService													};

// definition of the componentName
	private String												componentName				= null;

	private HashMap<String, Cea2PropertyIF>						cea2Properties				= new HashMap<String, Cea2PropertyIF>();

// definition of several variables
	transient private Cea2BusIF									cea2Bus						= null;

// CEA component's write information to the tracing service to log warnings, errors or other informations
	transient private Cea2LogTraceServiceIF						traceService				= null;

//
	transient private Cea2HelpServiceIF							helpService					= null;

//
	transient private Cea2SystemServiceIF						systemService				= null;
//	transient protected Locale									userLanguage				= null;

	transient private Cea2ItemSelectionServiceIF				itemSelectionService		= null;

	// ItemFactoryService supports producer components in creating CEA2 items
	transient private Cea2ItemFactoryServiceIF					itemFactoryService			= null;

	//
	transient private Cea2UnitServiceIF							unitService					= null;

	//
	transient private Cea2UndoServiceIF							undoService					= null;

	transient protected boolean									inputValid					= false;
	transient protected Vector<Cea2ComponentEventListenerIF>	cea2ComponentEventListeners	= new Vector<Cea2ComponentEventListenerIF>();

	transient private ResourceBundle							rbLocalStrings				= null;

	public void cea2Init(Cea2BusIF cea2Bus) {
		this.cea2Bus = cea2Bus;
		try {
			cea2Bus.cea2AddListener(this);
		} catch (Cea2ListenerRejected ex) {
		}

		// ceaGetItemsAvailable: get a list of all items currently published to the bus of specified type;
		// get a list of used services
		Cea2ItemIF[] serviceItems = cea2Bus.cea2GetServiceItemsAvailable(TypesOfUsedService);
		if (serviceItems != null) {
			for (Cea2ItemIF ceaItem : serviceItems) {
				if (ceaItem instanceof Cea2LogTraceServiceIF)
					setTraceService((Cea2LogTraceServiceIF) ceaItem);
				else if (ceaItem instanceof Cea2HelpServiceIF)
					setHelpService((Cea2HelpServiceIF) ceaItem);
				else if (ceaItem instanceof Cea2SystemServiceIF)
					setSystemService((Cea2SystemServiceIF) ceaItem);
				else if (ceaItem instanceof Cea2ItemFactoryServiceIF)
					setItemFactory((Cea2ItemFactoryServiceIF) ceaItem);
				else if (ceaItem instanceof Cea2UnitServiceIF)
					setUnitService((Cea2UnitServiceIF) ceaItem);
				else if (ceaItem instanceof Cea2ItemSelectionServiceIF)
					setItemSelectionService((Cea2ItemSelectionServiceIF) ceaItem);
				else if (ceaItem instanceof Cea2UndoServiceIF)
					setUndoService((Cea2UndoServiceIF) ceaItem);
			}
		}
		if (itemFactoryService == null) {
			if (traceService != null
					&& traceService.cea2IsLogging(Cea2LogArea.ComponentExecution,
							Cea2LogLevel.Error)) {
				traceService
						.cea2WriteMessage(
								Cea2LogArea.ComponentExecution,
								Cea2LogLevel.Error,
								cea2GetName()
										+ ": Cannot create dataitems, this component needs an item-factory service!");
			}
		}
		cea2SetName(getClass().getSimpleName());
	}

	// return the individual name of a component instance
	public String cea2GetName() {
		return componentName;
	}

	// set the individual name of a component instance
	public void cea2SetName(String name) {
		if (componentName == null || (componentName.equals(name) == false)) {
			componentName = name;
			sendComponentEvent(new Cea2ComponentEvent(Cea2EventKind.ComponentNameChanged));
		}
	}

// returns the version of a component
	public String cea2GetVersion() {
		return ceaVersion;
	}

	// return cea2 bus
	public Cea2BusIF getCea2Bus() {
		return cea2Bus;
	}

//initialize trace service
	private void setTraceService(Cea2LogTraceServiceIF traceService) {
		if (this.traceService != null) {
			// ceaRemoveListener: we lose interest on that item
			this.traceService.cea2RemoveListener(this);
		}
		this.traceService = traceService;
		if (this.traceService != null) {
			try {
				// ceaAddListener: a component interested in events denoting changes to an item registers with the item of interest
				this.traceService.cea2AddListener(this);
			} catch (Cea2ListenerRejected clr) {
				;
			}
		}
	}

//initialize help service
	private void setHelpService(Cea2HelpServiceIF helpService) {
		if (this.helpService != null) {
			// cea2RemoveListener: we lose interest on that item
			this.helpService.cea2RemoveListener(this);
		}

		this.helpService = helpService;
		if (this.helpService != null) {
			try {
				// cea2AddListener: a component interested in events denoting changes to an item registers with the item of interest
				this.helpService.cea2AddListener(this);
			} catch (Cea2ListenerRejected clr) {
				;
			}
		}
	}

	public Cea2HelpServiceIF getHelpService() {
		return helpService;
	}

	//initialize system service
	private void setSystemService(Cea2SystemServiceIF systemService) {
		if (this.systemService != null) {
			// cea2RemoveListener: we lose interest on that item
			this.systemService.cea2RemoveListener(this);
		}
		this.systemService = systemService;
		if (this.systemService != null) {
			try {
				// cea2AddListener: a component interested in events denoting changes to an item registers with the item of interest
				this.systemService.cea2AddListener(this);
			} catch (Cea2ListenerRejected clr) {
				;
			}
			setLocale(this.systemService.cea2GetUserLanguage());
		}
	}

	//initialize item factory service
	private void setItemFactory(Cea2ItemFactoryServiceIF itemFactory) {
		if (this.itemFactoryService != null) {
			// cea2RemoveListener: we lose interest on that item
			this.itemFactoryService.cea2RemoveListener(this);
		}
		this.itemFactoryService = itemFactory;
		if (this.itemFactoryService != null) {
			try {
				// cea2AddListener: a component interested in events denoting changes to an item registers with the item of interest
				this.itemFactoryService.cea2AddListener(this);
			} catch (Cea2ListenerRejected clr) {
				;
			}
		}
	}

	private void setItemSelectionService(Cea2ItemSelectionServiceIF itemSelectionService) {
		this.itemSelectionService = itemSelectionService;
	}

	private void setUnitService(Cea2UnitServiceIF unitService) {
		this.unitService = unitService;
	}

	private void setUndoService(Cea2UndoServiceIF undoService) {
		this.undoService = undoService;
	}

	protected void sendComponentEvent(Cea2ComponentEventIF anEvent) {
		Vector<Cea2ComponentEventListenerIF> listeners = getCea2ComponentEventListeners();
		if (listeners == null)
			return;

		for (int i = listeners.size() - 1; i >= 0; i--) {
			try {
				listeners.get(i).cea2HandleEvent(anEvent);
			} catch (NullPointerException e) {
			} catch (Cea2VetoException e) {
			}
		}
	}

	public int cea2GetPropertyCount() {
		return cea2Properties.size();
	}

	public Cea2PropertyIF[] cea2GetAllProperties() {
		ArrayList<Cea2PropertyIF> propertyList = new ArrayList<Cea2PropertyIF>();
		for (String cea2Property : cea2Properties.keySet()) {
			propertyList.add(cea2Properties.get(cea2Property));
		}
		return propertyList.toArray(new Cea2PropertyIF[propertyList.size()]);
	}

	public Cea2PropertyIF cea2GetProperty(String propertyName) throws Cea2PropertyNotFound {
		Cea2PropertyIF cea2Property = cea2Properties.get(propertyName);
		if (cea2Property == null) {
			throw new Cea2PropertyNotFound("Property \"" + propertyName
					+ "\" not found in component \"" + this.cea2GetName() + "\" ");
		}
		return cea2Property;
	}

	protected void addProperty(Cea2PropertyIF newCea2Property) {
		if (newCea2Property == null)
			return;
		String newPropName = newCea2Property.cea2GetName();
		if (cea2Properties.containsKey(newPropName) == false) {
			cea2Properties.put(newPropName, newCea2Property);
			sendComponentEvent(new Cea2ComponentPropertyChangedEvent(newPropName, null,
					newCea2Property.cea2GetValue()));
		}
	}

	public void cea2AddComponentListener(Cea2ComponentEventListenerIF listener)
			throws Cea2ListenerRejected {
		cea2ComponentEventListeners.add(listener);
	}

	public void cea2RemoveComponentListener(Cea2ComponentEventListenerIF listener) {
		cea2ComponentEventListeners.remove(listener);
	}

	public boolean delete() {
		if (systemService != null) {
			try {
				systemService.cea2DeleteComponent(this);
				return true;
			} catch (Cea2ComponentNotFound ex) {
				;
			}
		} else {
			cea2Bus.cea2RevokeComponent(this);
		}
		return false;
	}

	protected void writeException(Exception e) {
		if (traceService != null)
			traceService.cea2WriteMessage(Cea2LogArea.ComponentExecution, Cea2LogLevel.Error, e.toString());
		e.printStackTrace();
	}

	protected String getParamString(String config, String param) {
		String s1 = new StringBuffer('<').append(param).append('>').toString();
		String s2 = new StringBuffer("</").append(param).append('>').toString();
		int startIndex = config.indexOf(s1);
		if (startIndex < 0)
			return null;
		startIndex = startIndex + s1.length();
		int stopIndex = config.indexOf(s2, startIndex);
		if (stopIndex < 0)
			return null;

		String s = config.substring(startIndex, stopIndex);
		s = s.trim();
		return s;
	}

	//  implementation of interface Cea2BusEventListenerIF
	public void cea2HandleEvent(Cea2BusEventIF anEvent) {
		switch (anEvent.cea2GetKindOfEvent()) {
			case Cea2EventKind.BusItemAvailable:
				Cea2ItemIF availableItem = ((Cea2BusItemAvailableEventIF) anEvent).cea2GetItem();
				if (availableItem instanceof Cea2LogTraceServiceIF && traceService == null) {
					setTraceService((Cea2LogTraceServiceIF) availableItem);
				} else if (availableItem instanceof Cea2ItemFactoryServiceIF
						&& itemFactoryService == null) {
					setItemFactory((Cea2ItemFactoryServiceIF) availableItem);
				} else if (availableItem instanceof Cea2HelpServiceIF && helpService == null) {
					setHelpService((Cea2HelpServiceIF) availableItem);
				} else if (availableItem instanceof Cea2SystemServiceIF && systemService == null) {
					setSystemService((Cea2SystemServiceIF) availableItem);
				}
				break;
			case Cea2EventKind.BusComponentAvailable:
				// nothing to do
				break;
			case Cea2EventKind.BusComponentSequenceChanged:
				// nothing to do
				break;
		}
	}

//  implementation of interface CeaItemEventListenerIF
	public void cea2HandleEvent(Cea2ItemEventIF anEvent) throws Cea2VetoException {
		try {
			Cea2ItemIF cea2Item = anEvent.cea2GetItem();
			switch (anEvent.cea2GetKindOfEvent()) {
				case Cea2EventKind.ItemPropertyChanged:
					Cea2ItemPropertyChangedEventIF ipce = (Cea2ItemPropertyChangedEventIF) anEvent;
					if (cea2Item == systemService) {
						String propName = ipce.cea2GetPropertyName();
						if (propName.equals("Locale"))
							setLocale(this.systemService.cea2GetUserLanguage());
					}
					break;
				case Cea2EventKind.ItemReplaced:
					Cea2ItemReplacedEventIF ire = (Cea2ItemReplacedEventIF) anEvent;
					Cea2ItemIF newItem = ire.cea2GetNewItem();
					if (cea2Item == traceService) {
						setTraceService((Cea2LogTraceServiceIF) newItem);
					} else if (cea2Item == helpService) {
						setHelpService((Cea2HelpServiceIF) newItem);
					} else if (cea2Item == traceService) {
						setTraceService((Cea2LogTraceServiceIF) newItem);
					} else if (cea2Item == traceService) {
						setTraceService((Cea2LogTraceServiceIF) newItem);
					} else if (cea2Item == traceService) {
						setTraceService((Cea2LogTraceServiceIF) newItem);
					}
					break;
				case Cea2EventKind.ItemRevokedFromBus:
					if (cea2Item == traceService) {
						setTraceService(null);
					} else if (cea2Item == itemFactoryService) {
						setItemFactory(null);
					} else if (cea2Item == helpService) {
						setHelpService(null);
					} else if (cea2Item == systemService) {
						setSystemService(null);
					}
					break;
			}
		} catch (Cea2ItemNotAvailable ex) {
		}
	}
	
	public String getLocalString(String key) {
		return rbLocalStrings.getString(key);
	}
	private void setLocale(String loc) {
		try {
			rbLocalStrings = PropertyResourceBundle.getBundle(getClass()
					.getName(), new Locale(loc), getClass().getClassLoader());
		} catch (MissingResourceException e) {

		}
	}

	protected class Cea2ItemEvent implements Cea2ItemEventIF {
		Cea2ItemIF	cea2Item;
		int			kindOfEvent;

		public Cea2ItemEvent(Cea2ItemIF anItem, int kindOfEvent) {
			if (anItem == null)
				throw new NullPointerException("Cea2ItemIF");
			cea2Item = anItem;
			this.kindOfEvent = kindOfEvent;
		}

		public Cea2ItemIF cea2GetItem() throws Cea2ItemNotAvailable {
			return cea2Item;
		}

		// return the kind of the respective event
		public int cea2GetKindOfEvent() {
			return kindOfEvent;
		}
		
		public void send() {
			// getItemConsumers: find out the consumers, which have registered as event listeners
			Cea2ItemEventListenerIF[] listeners = cea2Item.cea2GetListeners();
			if (listeners == null)
				return;
			for (Cea2ItemEventListenerIF listener : listeners) {
				try {
					listener.cea2HandleEvent(this);
				} catch (Cea2VetoException e) {
				}
			}
		}
	}
	protected class Cea2ItemDataChangedEvent extends Cea2ItemEvent implements Cea2ItemDataChangedEventIF {
		public Cea2ItemDataChangedEvent(Cea2ItemIF anItem) {
			super(anItem, Cea2EventKind.ItemDataChanged);
		}
	}

	protected class Cea2ItemPropertyChangedEvent implements Cea2ItemPropertyChangedEventIF {
		Cea2ItemIF	cea2Item;
		String		propertyName;
		Object		oldValue;
		Object		newValue;

		public Cea2ItemPropertyChangedEvent(Cea2ItemIF cea2Item, String propertyName, Object oldValue,
				Object newValue) {
			this.cea2Item = cea2Item;
			this.propertyName = propertyName;
			this.oldValue = oldValue;
			this.newValue = newValue;

		}

		public String cea2GetPropertyName() {
			return propertyName;
		}

		public Object cea2GetOldValue() {
			return oldValue;
		}

		public Object cea2GetNewValue() {
			return newValue;
		}

		public Cea2ItemIF cea2GetItem() throws Cea2ItemNotAvailable {
			return cea2Item;
		}

		public int cea2GetKindOfEvent() {
			return Cea2EventKind.ItemPropertyChanged;
		}
	}

	protected class Cea2Property implements Cea2PropertyIF {
		EventSendingCea2ItemIF	eventSendingCea2Item;
		String					name		= null;
		Object					value		= null;
		int						type		= -1;
		String					category	= null;
		String					description	= null;
		boolean					readOnly	= true;
		boolean					fixed		= false;

		public Cea2Property(String name) {
			this.name = name;
		}

		public Cea2Property(String name, Object value, EventSendingCea2ItemIF eventSendingCea2Item) {
			this.name = name;
			this.value = value;
			this.eventSendingCea2Item = eventSendingCea2Item;
		}
		public Cea2Property(String name, Object value) {
			this.name = name;
			this.value = value;
			this.eventSendingCea2Item = null;
		}

		public void cea2SetValue(Object value) throws Cea2PropertyFixed {
			if (fixed)
				throw new Cea2PropertyFixed();
			Object oldValue = this.value;
			this.value = value;
			if (eventSendingCea2Item !=null) {
				Cea2ItemPropertyChangedEventIF propertyChangedEvent = new Cea2ItemPropertyChangedEvent(eventSendingCea2Item, name, oldValue, this.value);
				eventSendingCea2Item.sendCea2ItemEvent(propertyChangedEvent);
			}
		}

		public Object cea2GetValue() {
			return value;
		}

		public String cea2GetName() {
			return name;
		}

		@SuppressWarnings("boxing")
		public Object cea2GetType() {
			return type;
		}

		public String cea2GetCategory() {
			return category;
		}

		public String cea2GetDescription() {
			return description;
		}

		public boolean cea2IsReadonly() {
			return readOnly;
		}

		public boolean cea2IsFixed() {
			return fixed;
		}

		public String toString() {
			if (value == null)
				return "";
			return value.toString();
		}

		public String getDescription() {
			return description;
		}

		public void setDescription(String description) {
			this.description = description;
		}
	}

	protected class Cea2ComponentEvent implements Cea2ComponentEventIF {
		int	ceaEventKind	= Cea2EventKind.Unknown;

		public Cea2ComponentEvent(int ceaEventKind) {
			this.ceaEventKind = ceaEventKind;
		}

		// returns the event's source
		public Cea2ComponentIF cea2GetComponent() {
			return BasicCea2Component.this;
		}

		// return the kind of the respective event
		public int cea2GetKindOfEvent() {
			return ceaEventKind;
		}

	}

	protected class Cea2ComponentPropertyChangedEvent extends Cea2ComponentEvent implements Cea2ComponentPropertyChangedEventIF {
		String	propName	= null;
		Object	oldValue	= null;
		Object	newValue	= null;

		public Cea2ComponentPropertyChangedEvent(String propName, Object oldValue, Object newValue) {
			super(Cea2EventKind.ComponentPropertyChanged);
			this.propName = propName;
			this.oldValue = oldValue;
			this.newValue = newValue;
		}

		public String cea2GetPropertyName() {
			return propName;
		}

		public Object cea2GetOldValue() {
			return oldValue;
		}

		public Object cea2GetNewValue() {
			return newValue;
		}
	}

	protected HashMap<String, Cea2PropertyIF> getCea2Properties() {
		return cea2Properties;
	}

	protected void setCea2Properties(HashMap<String, Cea2PropertyIF> cea2Properties) {
		this.cea2Properties = cea2Properties;
	}

	protected Cea2ItemFactoryServiceIF getItemFactoryService() {
		return itemFactoryService;
	}

	protected void setItemFactoryService(Cea2ItemFactoryServiceIF itemFactoryService) {
		this.itemFactoryService = itemFactoryService;
	}

	protected boolean isInputValid() {
		return inputValid;
	}

	protected void setInputValid(boolean inputValid) {
		this.inputValid = inputValid;
	}

	protected Vector<Cea2ComponentEventListenerIF> getCea2ComponentEventListeners() {
		return cea2ComponentEventListeners;
	}

	protected void setCea2ComponentEventListeners(
			Vector<Cea2ComponentEventListenerIF> cea2ComponentEventListeners) {
		this.cea2ComponentEventListeners = cea2ComponentEventListeners;
	}

	protected ResourceBundle getRbLocalStrings() {
		return rbLocalStrings;
	}

	protected void setRbLocalStrings(ResourceBundle rbLocalStrings) {
		this.rbLocalStrings = rbLocalStrings;
	}

	protected Cea2LogTraceServiceIF getTraceService() {
		return traceService;
	}

	protected Cea2SystemServiceIF getSystemService() {
		return systemService;
	}

	protected Cea2ItemSelectionServiceIF getItemSelectionService() {
		return itemSelectionService;
	}

	protected Cea2UnitServiceIF getUnitService() {
		return unitService;
	}

	protected Cea2UndoServiceIF getUndoService() {
		return undoService;
	}

	protected void setCea2Bus(Cea2BusIF cea2Bus) {
		this.cea2Bus = cea2Bus;
	}

	public Locale getLocale() {
		if (systemService != null)
			return new Locale(systemService.cea2GetUserLanguage());
		else 
			return Locale.getDefault();
	}
}
Detected encoding: ASCII (7 bit)2