blob: 6445cd25a6792af03d71816159e39c35c3fa62cf [file] [log] [blame]
package org.eclipse.osbp.abstractstatemachine;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.eclipse.osbp.ui.api.statemachine.IEventSource;
import org.eclipse.osbp.ui.api.statemachine.IStateMachine;
import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType;
import com.vaadin.server.Resource;
public abstract class AbstractEventSource extends
AbstractStateMachineParticipant implements IEventSource,
IEventSource.Enabler {
protected boolean ready;
@Override
public void init() {
}
@Override
public void setStatemachine(IStateMachine statemachine) {
super.setStatemachine(statemachine);
statemachine.registerEnabler(this);
}
@Override
public void enable(IEventSource.Enabler listener, String id, Boolean enabled) {
Method method = setter(listener, id + "Enabled", Boolean.class);
if (method == null) {
return;
}
try {
method.invoke(listener, enabled);
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
LOGGER.error("{}", e);
return;
}
}
@Override
public void append(Enabler listener, String id, String key) {
Method get = getter(listener, id);
Class<?> retType = getReturnType(listener, id);
if (get == null) {
return;
}
try {
Object content = get.invoke(listener);
if (retType.isAssignableFrom(String.class)) {
String got = null;
if(content != null) {
got = (String)content;
if(got.contains(".") && ".".equals(key)) {
got = got.substring(0, got.indexOf(key)) + key;
} else {
got += key;
}
} else {
got = key;
}
setter(listener, id, String.class).invoke(listener, got);
} else if (retType.isAssignableFrom(Double.class)) {
} else {
return;
}
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
LOGGER.error("{}", e);
}
}
@Override
public void remove(Enabler listener, String id, int pos) {
Method get = getter(listener, id);
Method set = setter(listener, id, String.class);
if (get == null || set == null) {
return;
}
try {
String got = (String) get.invoke(listener);
if (got.isEmpty()) {
return;
}
if (pos > got.length() - 1 || pos < 0) {
set.invoke(listener, got.substring(0, got.length() - 1));
} else {
set.invoke(listener,
got.substring(0, pos - 1) + got.substring(pos + 1));
}
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
LOGGER.error("{}", e);
}
}
@Override
public void caption(IEventSource.Enabler listener, String id, String value) {
Method method = setter(listener, id+"Caption", String.class);
if (method == null) {
return;
}
try {
method.invoke(listener, value);
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
return;
}
}
@Override
public void image(IEventSource.Enabler listener, String id, String imageName) {
Method method = setter(listener, id + "Image", Object.class);
if (method == null || statemachine == null) {
return;
}
try {
Resource resource = statemachine.getThemeResourceService().getThemeResource(
imageName, ThemeResourceType.ICON);
method.invoke(listener, (Object) resource);
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
LOGGER.error("{}", e);
return;
}
}
}