ModelEditPage.java
package eu.javaexperience.webgsdb.activity;
import java.lang.reflect.Modifier;
import java.util.Collection;
import java.util.List;
import org.teavm.jso.dom.events.EventListener;
import org.teavm.jso.dom.events.MouseEvent;
import org.teavm.jso.dom.html.HTMLElement;
import eu.javaexperience.classes.ClassDescriptor;
import eu.javaexperience.classes.dinamic.DinamicModelManager;
import eu.javaexperience.gsdbrpc.WebDbModel;
import eu.javaexperience.interfaces.simple.SimpleCall;
import eu.javaexperience.reflect.CastTo;
import eu.javaexperience.teavm.datareprez.DataObjectTeaVMImpl;
import eu.javaexperience.text.StringTools;
import eu.javaexperience.verify.TranslationFriendlyValidationEntry;
import eu.javaexperience.webgsdb.frontend.BasicModelManagerUnit;
import eu.javaexperience.webgsdb.frontend.GenericModelManagementApi;
import eu.javaexperience.webgsdb.test.WebGsdbFrontendTestTools;
import eu.jvx.js.lib.bindings.H;
import eu.jvx.js.lib.bindings.VanillaTools;
import eu.jvx.js.lib.style.TbsStyle;
import eu.jvx.js.lib.ui.FrontendTools;
import eu.teasite.frontend.api.ApiClient;
import hu.ddsi.java.database.GenericStorage;
import hu.ddsi.java.database.GenericStoreData;
public class ModelEditPage
{
protected H targetContainer;
protected final ApiClient api;
protected final DinamicModelManager modelAccess;
protected String modelNamespace;
public ModelEditPage(H targetConteiner, ApiClient client, String modelNamespace)
{
this.targetContainer = targetConteiner;
api = client;
this.modelNamespace = modelNamespace;
modelAccess = createModelManager(client, modelNamespace);
}
public static DinamicModelManager<WebDbModel> createModelManager(ApiClient api, String modelNamespace)
{
return new DinamicModelManager<WebDbModel>
(
api.getApiClass(GenericModelManagementApi.class, modelNamespace),
new DataObjectTeaVMImpl(),
null
)
{
@Override
public WebDbModel createModelInstance()
{
return new WebDbModel()
{
@Override
public String toString()
{
String cls = (String) getExtraDataMap().get("class");
if(null != cls)
{
StringTools.getSubstringAfterLastString(cls, ".", cls);
}
return cls+": "+get("label");
}
@Override
public boolean set(String key, Object src)
{
if("do".equals(key))
{
GenericStoreData data = GenericStorage.getOrCreateGenericStoreData(this);
data.setId((Long) CastTo.Long.cast(src));
}
return super.set(key, src);
}
@Override
public Object get(String key)
{
if("class".equals(key))
{
return (String) getExtraDataMap().get("class");
}
return super.get(key);
}
@Override
public boolean validate(Collection<TranslationFriendlyValidationEntry> errors_and_warnings)
{
return false;
}
@Override
public boolean delete(Collection<TranslationFriendlyValidationEntry> validate)
{
return false;
}
};
}
};
}
public void initAfterInsert()
{
FrontendTools.runOnThread(new SimpleCall()
{
@Override
public void call()
{
H add = new H("div");
List<ClassDescriptor> models = modelAccess.getManagedModels();
for(ClassDescriptor cd:models)
{
if(!Modifier.isAbstract(cd.getModifiers()))
{
add.addChilds
(
createModelEditorButton(cd),
new H("br").getHtml()
);
}
}
add.addChilds(new H("div").attrs("id", "current_model_editor").getHtml());
targetContainer.addChilds(add);
}
});
}
public HTMLElement createModelEditorButton(final ClassDescriptor cls)
{
H ret = new H("div");
ret.attrs("#text", cls.getClassName(), "class", WebGsdbFrontendTestTools.CSS_BTN_SELECT_TABLE);
ret.style(TbsStyle.BTN_SUCCESS);
ret.onClick(new EventListener<MouseEvent>()
{
@Override
public void handleEvent(MouseEvent arg0)
{
HTMLElement tar = VanillaTools.getDom().getElementById("current_model_editor");
VanillaTools.removeAllChild(tar);
BasicModelManagerUnit add = createModelManagerUnit(cls);
tar.appendChild(new H("h4").attrs("#text", "Model: "+cls.getClassName()).getHtml());
tar.appendChild(add.getHtml());
add.refresh();
}
});
return ret.getHtml();
}
protected BasicModelManagerUnit createModelManagerUnit(ClassDescriptor cls)
{
return new BasicModelManagerUnit(cls, modelAccess, api);
}
}