use of com.twinsoft.convertigo.beans.mobile.components.UISharedComponent in project convertigo by convertigo.
the class CreateMobileApplicationTranslationsFileAction method run.
public void run() {
Display display = Display.getDefault();
Cursor waitCursor = new Cursor(display, SWT.CURSOR_WAIT);
Shell shell = getParentShell();
shell.setCursor(waitCursor);
try {
ProjectExplorerView explorerView = getProjectExplorerView();
if (explorerView != null) {
TreeObject treeObject = explorerView.getFirstSelectedTreeObject();
Object databaseObject = treeObject.getObject();
List<String> textList = new ArrayList<String>();
if ((databaseObject != null) && (databaseObject instanceof ApplicationComponent)) {
ApplicationComponent application = (ApplicationComponent) databaseObject;
new WalkHelper() {
@Override
protected void walk(DatabaseObject databaseObject) throws Exception {
String text = null;
if (databaseObject instanceof PageComponent) {
PageComponent page = (PageComponent) databaseObject;
text = page.getTitle();
} else if (databaseObject instanceof UIUseShared) {
UIUseShared uius = (UIUseShared) databaseObject;
UISharedComponent uisc = uius.getTargetSharedComponent();
if (uisc != null && !uius.isRecursive()) {
super.walk(uisc);
}
} else if (databaseObject instanceof UIText) {
UIText uiText = (UIText) databaseObject;
MobileSmartSourceType msst = uiText.getTextSmartType();
if (Mode.PLAIN.equals(msst.getMode())) {
text = msst.getValue();
}
}
if (text != null && !textList.contains(text)) {
textList.add(text);
}
super.walk(databaseObject);
}
}.init(application);
MobileApplicationTranslationsDialog dlg = new MobileApplicationTranslationsDialog(shell);
int ret = dlg.open();
if (ret != Window.OK) {
return;
}
Locale from = dlg.getLocaleFrom();
Locale to = dlg.getLocaleTo();
boolean auto = dlg.isAuto();
File i18nDir = new File(application.getProject().getDirPath(), "DisplayObjects/mobile/assets/i18n");
// store source file
File source = new File(i18nDir, from.getLanguage() + ".json");
TranslateUtils.storeTranslations(textList, source);
ConvertigoPlugin.logDebug(source.getName() + " file successfully created or updated.");
// store target file
if (!to.equals(from)) {
File target = new File(i18nDir, to.getLanguage() + ".json");
// translate with google api
if (auto) {
ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
dialog.run(true, false, new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
monitor.beginTask("translating", IProgressMonitor.UNKNOWN);
Translator translator = TranslateUtils.newTranslator();
try {
translator.translate(from, source, to, target);
ConvertigoPlugin.logDebug(target.getName() + " file successfully translated.");
} catch (Exception e) {
ConvertigoPlugin.logError(e.getMessage(), false);
try {
TranslateUtils.storeTranslations(textList, target);
} catch (Exception ex) {
}
}
monitor.done();
}
});
} else // do not translate
{
TranslateUtils.storeTranslations(textList, target);
}
ConvertigoPlugin.logDebug(target.getName() + " file successfully created or updated.");
}
// regenerate app templates
try {
application.markApplicationAsDirty();
for (PageComponent page : application.getPageComponentList()) {
if (page.isEnabled()) {
page.markPageAsDirty();
}
}
} catch (Throwable t) {
}
ConvertigoPlugin.logInfo("Translations file(s) successfully created or updated.", true);
}
}
} catch (Throwable e) {
ConvertigoPlugin.logException(e, "Unable to create the Mobile application translations file(s)!");
} finally {
shell.setCursor(null);
waitCursor.dispose();
}
}
use of com.twinsoft.convertigo.beans.mobile.components.UISharedComponent in project convertigo by convertigo.
the class SharedComponentWizard method createSharedComponent.
private UISharedComponent createSharedComponent() throws Exception {
UIComponent uic = (UIComponent) getFirstInList();
UISharedComponent uisc = new UISharedComponent();
uisc.setName(shared_comp_name);
uisc.hasChanged = true;
uisc.bNew = true;
// must be added before copy/paste !
uic.getApplication().add(uisc);
for (DatabaseObject dbo : objectList) {
ConvertigoPlugin.clipboardManagerSystem.reset();
ConvertigoPlugin.clipboardManagerSystem.isCopy = true;
String sXml = ConvertigoPlugin.clipboardManagerSystem.copy(dbo);
ConvertigoPlugin.clipboardManagerSystem.paste(sXml, uisc, false);
}
updateMobileSmartSources(uisc);
for (String name : dlg_map.keySet()) {
String value = getVariablesDefaultValue(name);
uisc.add(createCompVariable(dlg_map.get(name), value));
}
return uisc;
}
use of com.twinsoft.convertigo.beans.mobile.components.UISharedComponent in project convertigo by convertigo.
the class SharedComponentWizard method scanForVariables.
private void scanForVariables(final UIComponent origin) throws Exception {
final Set<String> identifierSet = new HashSet<String>();
try {
new WalkHelper() {
private void addDeclaration(String var_name, String var_value) {
if (var_name != null && !var_name.isEmpty() && !main_map.containsKey(var_name)) {
main_map.put(var_name, var_value == null ? "''" : var_value);
}
}
private void getMainDeclarations() {
try {
List<String> declarations = new ArrayList<String>();
String c8o_Declarations = "", markerId = "";
if (isInPage(origin)) {
markerId = "PageDeclaration";
String c8o_UserCustoms = origin.getPage().getScriptContent().getString();
c8o_Declarations = Ionic3Builder.getMarker(c8o_UserCustoms, markerId);
} else if (isInSharedComponent(origin)) {
markerId = "SharedCompDeclaration";
UISharedComponent uisc = origin.getSharedComponent();
for (UICompVariable var : uisc.getVariables()) {
c8o_Declarations += "let " + var.getVariableName() + " = " + var.getVariableValue() + ";" + System.lineSeparator();
}
} else if (isInApplication(origin)) {
markerId = "AppDeclaration";
String c8o_UserCustoms = origin.getApplication().getComponentScriptContent().getString();
c8o_Declarations = Ionic3Builder.getMarker(c8o_UserCustoms, markerId);
}
if (!c8o_Declarations.isEmpty()) {
for (String line : Arrays.asList(c8o_Declarations.split(System.lineSeparator()))) {
line = line.trim();
if (!line.isEmpty() && line.indexOf(markerId) == -1) {
declarations.add(line);
}
}
}
for (String line : declarations) {
// "(((\\w+)\\s(\\w+)([^\\=]+))(\\=([^\\=]+))?)"
Matcher matcher = d_var.matcher(line);
while (matcher.find()) {
String var_name = matcher.group(4);
String var_value = matcher.group(7);
if (var_value != null) {
var_value = var_value.trim();
if (var_value.charAt(var_value.length() - 1) == ';') {
var_value = var_value.substring(0, var_value.length() - 1);
}
var_value = escapeString(var_value);
}
addDeclaration(var_name, var_value);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private boolean isInForDirective(UIComponent uic) {
return getForDirective(uic) != null;
}
private UIControlDirective getForDirective(UIComponent uic) {
DatabaseObject databaseObject = uic;
while (databaseObject != null && (!(databaseObject instanceof UIControlDirective) || !AttrDirective.ForEach.name().equals(((UIControlDirective) databaseObject).getDirectiveName()))) {
databaseObject = databaseObject.getParent();
}
if (databaseObject == null)
return null;
else
return (UIControlDirective) databaseObject;
}
private void getForDirectiveVariables(UIComponent uic) {
UIComponent uicomponent = uic;
while (isInForDirective(uicomponent)) {
UIControlDirective uicd = getForDirective(uicomponent);
if (!uic.equals(uicd)) {
String item = "item" + uicd.priority;
addDeclaration(item, "[]");
addMapVariable(item, item, "this._params_." + item);
addMapVariable(item, uicd.toString() + " : found variable which stands for the iterator's item");
String itemName = uicd.getDirectiveItemName();
addDeclaration(itemName, "{}");
addMapVariable(itemName, itemName, "this._params_." + itemName);
addMapVariable(itemName, uicd.toString() + " : found variable which stands for the customized iterator's item");
String indexName = uicd.getDirectiveIndexName();
addDeclaration(indexName, "0");
addMapVariable(indexName, indexName, "this._params_." + indexName);
addMapVariable(indexName, uicd.toString() + " : found variable which stands for the customized iterator's index");
String expression = uicd.getDirectiveExpression();
if (!expression.isEmpty()) {
Matcher matcher = null;
List<String> list = Arrays.asList(expression.split("\\;"));
for (String s : list) {
matcher = d_var_let.matcher(s);
while (matcher.find()) {
String expvar = matcher.group(3);
addDeclaration(expvar, "''");
addMapVariable(expvar, expvar, "this._params_." + expvar);
addMapVariable(expvar, uicd.toString() + " : found variable used by the customized iterator's expression");
}
matcher = d_var_as.matcher(s);
while (matcher.find()) {
String expvar = matcher.group(4);
addDeclaration(expvar, "''");
addMapVariable(expvar, expvar, "this._params_." + expvar);
addMapVariable(expvar, uicd.toString() + " : found variable used by the customized iterator's expression");
}
}
}
}
DatabaseObject dbo = uicd.getParent();
uicomponent = dbo instanceof UIComponent ? (UIComponent) dbo : null;
}
}
private boolean checkVariable(String name) {
if (name == null || name.isEmpty())
return false;
if (identifierSet.contains(name)) {
return false;
}
if ("global".equals(name))
return false;
if ("router".equals(name))
return false;
return true;
}
private void addMapVariable(String name, String target, String replacement) {
if (checkVariable(name)) {
String normalized_name = StringUtils.normalize(name);
String var_name = normalized_name;
if (ovarMap.containsKey(var_name)) {
// System.out.println("var_name: "+ var_name + " already in ovarMap");
} else {
ovarMap.put(var_name, new HashMap<String, String>());
}
ovarMap.get(var_name).put(target, replacement.replace("_params_." + name, "_params_.") + var_name);
}
}
private void addMapVariable(String name, String infos) {
if (checkVariable(name)) {
String normalized_name = StringUtils.normalize(name);
String var_name = normalized_name;
if (infoMap.containsKey(var_name)) {
// System.out.println("var_name: "+ var_name + " already in infoMap");
} else {
infoMap.put(var_name, infos);
}
}
}
private void scanSmartSource(UIComponent uic, String p_name, MobileSmartSourceType msst) throws Exception {
boolean extended = !forTemplate(uic);
String s = null;
if (Mode.SCRIPT.equals(msst.getMode())) {
s = msst.getValue(extended);
}
if (Mode.SOURCE.equals(msst.getMode())) {
s = msst.getSmartSource().toJsonString();
}
if (s != null) {
String infos = uic.toString() + " : found variable used by '" + p_name + "' property";
Matcher matcher = p_var.matcher(s);
while (matcher.find()) {
String group1 = matcher.group(1);
String group2 = matcher.group(2);
// String group3 = matcher.group(3);
String group4 = matcher.group(4);
String name = group4;
String target = group1;
String replacement = group2 + "._params_." + name;
if (isInControlEvent(uic)) {
if (forTemplate(uic)) {
replacement = "_params_." + name;
} else {
replacement = "scope._params_." + name;
}
}
addMapVariable(name, target, replacement);
addMapVariable(name, infos);
}
}
}
@Override
public void init(DatabaseObject databaseObject) throws Exception {
getMainDeclarations();
if (isInForDirective(origin)) {
getForDirectiveVariables(origin);
}
super.init(databaseObject);
}
@Override
protected void walk(DatabaseObject databaseObject) throws Exception {
if (databaseObject instanceof UIComponent) {
UIComponent uic = (UIComponent) databaseObject;
if (uic.isEnabled() && !isInControlEvent(uic)) {
if (databaseObject instanceof UIDynamicElement) {
String identifier = ((UIDynamicElement) databaseObject).getIdentifier();
if (!identifier.isEmpty()) {
identifierSet.add(identifier);
}
}
for (java.beans.PropertyDescriptor pd : CachedIntrospector.getBeanInfo(databaseObject).getPropertyDescriptors()) {
if (pd.getPropertyEditorClass() != null) {
if (pd.getPropertyEditorClass().getSimpleName().equals("MobileSmartSourcePropertyDescriptor")) {
Method getter = pd.getReadMethod();
Object value = getter.invoke(databaseObject, new Object[] {});
if (value != null && value instanceof MobileSmartSourceType) {
MobileSmartSourceType msst = (MobileSmartSourceType) value;
if (Mode.SCRIPT.equals(msst.getMode()) || Mode.SOURCE.equals(msst.getMode())) {
scanSmartSource(uic, pd.getName(), msst);
}
}
}
}
}
if (databaseObject instanceof UIDynamicElement) {
UIDynamicElement uide = (UIDynamicElement) databaseObject;
IonBean ionBean = uide.getIonBean();
if (ionBean != null) {
for (IonProperty property : ionBean.getProperties().values()) {
Object p_value = property.getValue();
if (!p_value.equals(false)) {
MobileSmartSourceType msst = property.getSmartType();
if (Mode.SCRIPT.equals(msst.getMode()) || Mode.SOURCE.equals(msst.getMode())) {
scanSmartSource(uide, property.getName(), msst);
}
}
}
}
}
super.walk(databaseObject);
}
}
}
}.init(origin);
} catch (Exception e) {
throw new Exception("Unable to scan for variables", e);
}
}
use of com.twinsoft.convertigo.beans.mobile.components.UISharedComponent in project convertigo by convertigo.
the class MobilePickerComposite method lookupModelData.
private Map<String, Object> lookupModelData(TVObject tvObject) {
Map<String, Object> data = new HashMap<String, Object>();
Map<String, String> params = new HashMap<String, String>();
DatabaseObject dbo = null;
String searchPath = "";
Object object = tvObject.getObject();
JSONObject infos = tvObject.getInfos();
if (object != null) {
try {
if (object instanceof RequestableObject) {
dbo = (RequestableObject) object;
searchPath = "";
} else if (object instanceof DesignDocument) {
dbo = (DesignDocument) object;
DesignDocument dd = (DesignDocument) dbo;
params.put("ddoc", dd.getName());
params.put("view", tvObject.getParent().getName());
params.put("include_docs", infos.has("include_docs") ? infos.getString("include_docs") : "false");
searchPath = tvObject.getName().startsWith("get") ? ".rows.value" : "";
} else if (object instanceof UIControlDirective) {
dbo = (UIControlDirective) object;
do {
UIControlDirective directive = (UIControlDirective) dbo;
String rootDboName = "";
if (directive.getPage() != null) {
rootDboName = directive.getPage().getName();
} else if (directive.getMenu() != null) {
rootDboName = directive.getMenu().getName();
}
MobileSmartSourceType msst = directive.getSourceSmartType();
MobileSmartSource mss = msst.getSmartSource();
if (mss != null) {
dbo = mss.getDatabaseObject(rootDboName);
params.putAll(mss.getParameters());
searchPath = mss.getModelPath().replaceAll("\\?\\.", ".") + searchPath;
} else {
dbo = null;
}
} while (dbo != null && dbo instanceof UIControlDirective);
} else if (object instanceof UIForm) {
dbo = (UIForm) object;
searchPath = "";
} else if (object instanceof ApplicationComponent) {
dbo = (ApplicationComponent) object;
params.put("json", infos.toString());
searchPath = "";
} else if (object instanceof UIActionStack) {
dbo = (UIActionStack) object;
searchPath = "";
} else if (object instanceof IAction) {
if (object instanceof UIDynamicAction) {
dbo = (UIDynamicAction) object;
searchPath = "";
} else if (object instanceof UICustomAction) {
dbo = (UICustomAction) object;
searchPath = "";
}
} else if (object instanceof UISharedComponent) {
dbo = (UISharedComponent) object;
searchPath = "";
}
} catch (Exception e) {
e.printStackTrace();
}
}
data.put("databaseObject", dbo);
data.put("params", params);
data.put("searchPath", searchPath);
return data;
}
use of com.twinsoft.convertigo.beans.mobile.components.UISharedComponent in project convertigo by convertigo.
the class ApplicationComponentEditor method highlightComponent.
public void highlightComponent(MobileComponent mobileComponent, boolean selectPage) {
C8oBrowser.run(() -> {
if (selectPage && mobileComponent instanceof UIComponent) {
PageComponent pageComponent = ((UIComponent) mobileComponent).getPage();
if (pageComponent != null) {
selectPage(pageComponent.getSegment());
}
}
Document doc = browser.mainFrame().get().document().get();
MobileComponent mc = mobileComponent;
if (mc instanceof UIUseShared) {
UISharedComponent uisc = ((UIUseShared) mc).getTargetSharedComponent();
if (uisc != null) {
try {
mc = uisc.getUIComponentList().get(0);
} catch (IndexOutOfBoundsException ioobe) {
}
}
}
while (doc.findElementsByClassName("class" + mc.priority).isEmpty()) {
DatabaseObject parent = mc.getParent();
if (parent instanceof MobileComponent) {
mc = (MobileComponent) parent;
} else {
return;
}
}
c8oBrowser.executeJavaScriptAndReturnValue("_c8o_highlight_class('class" + mc.priority + "');");
});
}
Aggregations