package org.orienteer.core.method.methods;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.model.IModel;
import org.orienteer.core.component.command.AjaxCommand;
import org.orienteer.core.method.IMethodEnvironmentData;
import com.orientechnologies.orient.core.record.impl.ODocument;
/**
*
* OMethod for display and use OClass methods as buttons in single view
*
*/
public class OClassOMethod extends AbstractOClassOMethod{
private Component displayComponent;
private static final long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
@Override
public Component getDisplayComponent() {
if (displayComponent==null){
IModel<Object> model = (IModel<Object>) envData.getDisplayObjectModel();
displayComponent = new AjaxCommand<Object>(id, getTitleModel(),model) {
private static final long serialVersionUID = 1L;
@Override
protected void onInitialize() {
super.onInitialize();
setIcon(annotation.icon());
setBootstrapType(annotation.bootstrap());
setChangingDisplayMode(annotation.changingDisplayMode());
setChandingModel(annotation.changingModel());
}
@Override
public void onClick(AjaxRequestTarget target) {
invoke();
}
};
if (annotation.behaviors().length>0){
for ( Class<? extends Behavior> behavior : annotation.behaviors()) {
try {
displayComponent.add(behavior.newInstance());
} catch (InstantiationException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return displayComponent;
}
private void invoke(){
try {
Constructor<?> constructor=null;
try {
constructor = Class.forName(javaClassName).getConstructor(ODocument.class);
} catch (NoSuchMethodException e1) {
// TODO it is correct catch block with muffling
}
Method javaMethod = Class.forName(javaClassName).getMethod(javaMethodName, IMethodEnvironmentData.class);
if (constructor!=null && envData.getDisplayObjectModel().getObject() instanceof ODocument){
Object newInstance = constructor.newInstance(envData.getDisplayObjectModel().getObject());
javaMethod.invoke(newInstance,envData);
}else{
javaMethod.invoke(null,envData);
}
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}