diff --git a/org.archicontribs.modelrepository/META-INF/MANIFEST.MF b/org.archicontribs.modelrepository/META-INF/MANIFEST.MF index 1cc8fb5d..b4dd27a7 100644 --- a/org.archicontribs.modelrepository/META-INF/MANIFEST.MF +++ b/org.archicontribs.modelrepository/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: Archi Collaboration (coArchi) Bundle-SymbolicName: org.archicontribs.modelrepository;singleton:=true Bundle-Localization: plugin -Bundle-Version: 0.8.1.qualifier +Bundle-Version: 0.8.2.qualifier Bundle-Vendor: Phillip Beauvoir & Jean-Baptiste Sarrodie Require-Bundle: org.eclipse.help.ui, com.archimatetool.editor;bundle-version="4.9.0" diff --git a/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/actions/AbstractModelAction.java b/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/actions/AbstractModelAction.java index 7ff5767d..f30d8140 100644 --- a/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/actions/AbstractModelAction.java +++ b/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/actions/AbstractModelAction.java @@ -9,6 +9,7 @@ import java.lang.reflect.InvocationTargetException; import java.security.GeneralSecurityException; +import org.archicontribs.modelrepository.ModelRepositoryPlugin; import org.archicontribs.modelrepository.authentication.EncryptedCredentialsStorage; import org.archicontribs.modelrepository.authentication.UsernamePassword; import org.archicontribs.modelrepository.dialogs.CommitDialog; @@ -17,6 +18,7 @@ import org.archicontribs.modelrepository.grafico.IArchiRepository; import org.archicontribs.modelrepository.grafico.IRepositoryListener; import org.archicontribs.modelrepository.grafico.RepositoryListenerManager; +import org.archicontribs.modelrepository.preferences.IPreferenceConstants; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.window.Window; @@ -26,6 +28,13 @@ import com.archimatetool.editor.model.IEditorModelManager; import com.archimatetool.model.IArchimateModel; +import org.eclipse.core.commands.Parameterization; +import org.eclipse.core.commands.ParameterizedCommand; +import org.eclipse.core.commands.Command; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.commands.ICommandService; +import org.eclipse.ui.handlers.IHandlerService; + /** * Abstract ModelAction * @@ -106,6 +115,25 @@ protected void displayCredentialsErrorDialog(Throwable ex) { ex.printStackTrace(); displayErrorDialog(Messages.AbstractModelAction_5, Messages.AbstractModelAction_11); } + + protected boolean callPreCommitScript(String scriptName) { + try { + String commandId = "com.archimatetool.scripts.command.runScript"; + String paramId = "com.archimatetool.scripts.command.runScript.param1"; + IHandlerService handlerService = PlatformUI.getWorkbench().getService(IHandlerService.class); + ICommandService commandService = (ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class); + Command command = commandService.getCommand(commandId); + ParameterizedCommand parmCommand = + new ParameterizedCommand(command, new Parameterization[] { + new Parameterization(command.getParameter(paramId), scriptName) + }); + handlerService.executeCommand(parmCommand, null); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } /** * Offer to save the model @@ -134,6 +162,13 @@ protected boolean offerToSaveModel(IArchimateModel model) { * @return true if successful, false otherwise */ protected boolean offerToCommitChanges() { + + // Call pre-commit Script via jArchi plug-in command + String scriptname = ModelRepositoryPlugin.INSTANCE.getPreferenceStore().getString(IPreferenceConstants.PREFS_JARCHI_COMMIT_SCRIPT); + if (scriptname != "" && scriptname != null) { + callPreCommitScript(scriptname + ".ajs"); + } + CommitDialog commitDialog = new CommitDialog(fWindow.getShell(), getRepository()); int response = commitDialog.open(); diff --git a/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/IPreferenceConstants.java b/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/IPreferenceConstants.java index 5316a193..7c2f2fdf 100644 --- a/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/IPreferenceConstants.java +++ b/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/IPreferenceConstants.java @@ -60,4 +60,6 @@ public interface IPreferenceConstants { String PREFS_PRIMARY_PASSWORD_TIMEOUT = "passwordPrimaryTimeout"; String PREFS_PASSWORD_INACTIVITY_TIMEOUT = "passwordInactivityTimeout"; + + String PREFS_JARCHI_COMMIT_SCRIPT = "jarchiCommitScript"; } diff --git a/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/Messages.java b/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/Messages.java index 8ed7a332..f8a7c6e2 100644 --- a/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/Messages.java +++ b/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/Messages.java @@ -43,6 +43,10 @@ public class Messages extends NLS { public static String ModelRepositoryPreferencePage_21; public static String ModelRepositoryPreferencePage_25; + + public static String ModelRepositoryPreferencePage_26; + + public static String ModelRepositoryPreferencePage_27; public static String ModelRepositoryPreferencePage_3; diff --git a/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/ModelRepositoryPreferencePage.java b/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/ModelRepositoryPreferencePage.java index 601a881a..c7879aba 100644 --- a/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/ModelRepositoryPreferencePage.java +++ b/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/ModelRepositoryPreferencePage.java @@ -75,6 +75,9 @@ public class ModelRepositoryPreferencePage private Text fProxyUserNameTextField; private Text fProxyUserPasswordTextField; + + private Text fCommitScriptTextField; + private boolean sshPasswordChanged; private boolean proxyUsernameChanged; private boolean proxyPasswordChanged; @@ -303,6 +306,18 @@ public void widgetSelected(SelectionEvent e) { fProxyUserPasswordTextField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fProxyUserPasswordTextField.setEnabled(false); + // Commit Script Hook + Group commitScriptGroup = new Group(client, SWT.NULL); + commitScriptGroup.setText(Messages.ModelRepositoryPreferencePage_26); + commitScriptGroup.setLayout(new GridLayout(2, false)); + commitScriptGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + label = new Label(commitScriptGroup, SWT.NULL); + label.setText(Messages.ModelRepositoryPreferencePage_27); + + fCommitScriptTextField = UIUtils.createSingleTextControl(commitScriptGroup, SWT.BORDER, false); + fCommitScriptTextField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + setValues(); return client; @@ -336,6 +351,9 @@ private void setValues() { fUserNameTextField.setText(result.getName()); fUserEmailTextField.setText(result.getEmailAddress()); + // JArchi Integration + fCommitScriptTextField.setText(getPreferenceStore().getString(PREFS_JARCHI_COMMIT_SCRIPT)); + // Workspace folder fUserRepoFolderTextField.setText(getPreferenceStore().getString(PREFS_REPOSITORY_FOLDER)); @@ -401,6 +419,8 @@ public boolean performOk() { ex.printStackTrace(); } + getPreferenceStore().setValue(PREFS_JARCHI_COMMIT_SCRIPT, fCommitScriptTextField.getText()); + getPreferenceStore().setValue(PREFS_REPOSITORY_FOLDER, fUserRepoFolderTextField.getText()); getPreferenceStore().setValue(PREFS_SSH_IDENTITY_FILE, fSSHIdentityFileTextField.getText()); getPreferenceStore().setValue(PREFS_SSH_IDENTITY_REQUIRES_PASSWORD, fSSHIdentityRequiresPasswordButton.getSelection()); @@ -477,6 +497,8 @@ protected void performDefaults() { fProxyUserNameTextField.setText(""); //$NON-NLS-1$ fProxyUserPasswordTextField.setText(""); //$NON-NLS-1$ + fCommitScriptTextField.setText(getPreferenceStore().getDefaultString(PREFS_JARCHI_COMMIT_SCRIPT)); + updateIdentityControls(); updateProxyControls(); } diff --git a/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/PreferenceInitializer.java b/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/PreferenceInitializer.java index b1ff458b..4b84ba83 100644 --- a/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/PreferenceInitializer.java +++ b/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/PreferenceInitializer.java @@ -50,5 +50,7 @@ public void initializeDefaultPreferences() { store.setDefault(PREFS_PASSWORD_MIN_UPPERCASE_CHARS, 0); store.setDefault(PREFS_PASSWORD_MIN_DIGITS, 0); store.setDefault(PREFS_PASSWORD_MIN_SPECIAL_CHARS, 0); + + store.setDefault(PREFS_JARCHI_COMMIT_SCRIPT, ""); } } diff --git a/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/messages.properties b/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/messages.properties index aec81aec..befa76b6 100644 --- a/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/messages.properties +++ b/org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/preferences/messages.properties @@ -17,6 +17,8 @@ ModelRepositoryPreferencePage_24=Identity file: ModelRepositoryPreferencePage_2=Name: ModelRepositoryPreferencePage_21=Fetch interval (secs) ModelRepositoryPreferencePage_25=Change Primary Password... +ModelRepositoryPreferencePage_26=jArchi Integration +ModelRepositoryPreferencePage_27=Commit Script Name: ModelRepositoryPreferencePage_3=Email: ModelRepositoryPreferencePage_4=Workspace ModelRepositoryPreferencePage_5=Collaboration Workspace folder: