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
|