package org.flowerplatform.codesync.config.extension; import java.util.IllegalFormatException; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.flowerplatform.codesync.remote.CodeSyncOperationsService; import org.flowerplatform.emf_model.notation.View; import com.crispico.flower.mp.codesync.base.CodeSyncPlugin; import com.crispico.flower.mp.model.codesync.CodeSyncElement; public class InplaceEditorExtension_RegExFormat implements InplaceEditorExtension { private String codeSyncType; private String[] features; private String generateFormat; private String parseRegEx; public InplaceEditorExtension_RegExFormat(String codeSyncType, String[] features, String generateFormat, String parseRegEx) { this.features = features; this.generateFormat = generateFormat; this.parseRegEx = parseRegEx; this.codeSyncType = codeSyncType; } @Override public boolean getInplaceEditorText(View view, Map<String, Object> parameters) throws InplaceEditorParseException { CodeSyncElement cse = (CodeSyncElement) view.getDiagrammableElement(); if (cse == null || !codeSyncType.equals(cse.getType())) { return true; } Object[] values = new Object[features.length]; for (int i = 0; i < features.length; i++) { Object value = CodeSyncOperationsService.getInstance().getFeatureValue(cse, features[i]); if (value == null) { value = ""; } values[i] = value.toString(); } try { parameters.put(VIEW_TEXT, String.format(generateFormat, values)); } catch (IllegalFormatException e) { throw new InplaceEditorParseException(CodeSyncPlugin.getInstance().getMessage("ied.regexParseError")); } return false; } @Override public boolean setInplaceEditorText(View view, String text, Map<String, Object> parameters) throws InplaceEditorParseException { CodeSyncElement cse = (CodeSyncElement) view.getDiagrammableElement(); if (cse == null || !codeSyncType.equals(cse.getType())) { return true; } Matcher matcher = Pattern.compile(parseRegEx).matcher(text); if (!matcher.find() || features.length != matcher.groupCount()) { throw new InplaceEditorParseException(CodeSyncPlugin.getInstance().getMessage("ied.regexParseError")); } for (int i = 0; i < features.length; i++) { CodeSyncOperationsService.getInstance().setFeatureValue(cse, features[i], matcher.group(i + 1)); } return false; } }