Search in sources :

Example 1 with CloneInputDialog

use of org.archicontribs.modelrepository.dialogs.CloneInputDialog in project archi-modelrepository-plugin by archi-contribs.

the class CloneModelAction method run.

@Override
public void run() {
    CloneInputDialog dialog = new CloneInputDialog(fWindow.getShell());
    if (dialog.open() != Window.OK) {
        return;
    }
    final String repoURL = dialog.getURL();
    final String userName = dialog.getUsername();
    final String userPassword = dialog.getPassword();
    if (!StringUtils.isSet(repoURL) && !StringUtils.isSet(userName) && !StringUtils.isSet(userPassword)) {
        return;
    }
    File localRepoFolder = new File(ModelRepositoryPlugin.INSTANCE.getUserModelRepositoryFolder(), GraficoUtils.getLocalGitFolderName(repoURL));
    // Folder is not empty
    if (localRepoFolder.exists() && localRepoFolder.isDirectory() && localRepoFolder.list().length > 0) {
        MessageDialog.openError(fWindow.getShell(), Messages.CloneModelAction_0, // $NON-NLS-1$
        Messages.CloneModelAction_2 + " " + localRepoFolder.getAbsolutePath());
        return;
    }
    setRepository(new ArchiRepository(localRepoFolder));
    /**
     * Wrapper class to handle progress monitor
     */
    class CloneProgressHandler extends ProgressHandler {

        @Override
        public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
            super.run(monitor);
            try {
                monitor.beginTask(Messages.CloneModelAction_4, IProgressMonitor.UNKNOWN);
                // Proxy check
                ProxyAuthenticater.update(repoURL);
                // Clone
                getRepository().cloneModel(repoURL, userName, userPassword, this);
                monitor.subTask(Messages.CloneModelAction_5);
                // Load it from the Grafico files if we can
                IArchimateModel graficoModel = new GraficoModelLoader(getRepository()).loadModel();
                // We couldn't load it from Grafico so create a new blank model
                if (graficoModel == null) {
                    // New one. This will open in the tree
                    IArchimateModel model = IEditorModelManager.INSTANCE.createNewModel();
                    model.setFile(getRepository().getTempModelFile());
                    // And Save it
                    IEditorModelManager.INSTANCE.saveModel(model);
                    // Export to Grafico
                    getRepository().exportModelToGraficoFiles();
                    // And do a first commit
                    getRepository().commitChanges(Messages.CloneModelAction_6, false);
                    // Save the checksum
                    getRepository().saveChecksum();
                }
                // Store repo credentials if option is set
                if (ModelRepositoryPlugin.INSTANCE.getPreferenceStore().getBoolean(IPreferenceConstants.PREFS_STORE_REPO_CREDENTIALS)) {
                    SimpleCredentialsStorage scs = new SimpleCredentialsStorage(new File(getRepository().getLocalGitFolder(), IGraficoConstants.REPO_CREDENTIALS_FILE));
                    scs.store(userName, userPassword);
                }
                // Notify listeners
                notifyChangeListeners(IRepositoryListener.REPOSITORY_ADDED);
            } catch (GitAPIException | IOException | NoSuchAlgorithmException ex) {
                displayErrorDialog(Messages.CloneModelAction_0, ex);
            } finally {
                monitor.done();
            }
        }
    }
    Display.getCurrent().asyncExec(new Runnable() {

        @Override
        public void run() {
            try {
                ProgressMonitorDialog pmDialog = new ProgressMonitorDialog(fWindow.getShell());
                pmDialog.run(false, true, new CloneProgressHandler());
            } catch (InvocationTargetException | InterruptedException ex) {
                ex.printStackTrace();
            }
        }
    });
}
Also used : ProgressMonitorDialog(org.eclipse.jface.dialogs.ProgressMonitorDialog) CloneInputDialog(org.archicontribs.modelrepository.dialogs.CloneInputDialog) ArchiRepository(org.archicontribs.modelrepository.grafico.ArchiRepository) IOException(java.io.IOException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) GitAPIException(org.eclipse.jgit.api.errors.GitAPIException) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) GraficoModelLoader(org.archicontribs.modelrepository.grafico.GraficoModelLoader) SimpleCredentialsStorage(org.archicontribs.modelrepository.authentication.SimpleCredentialsStorage) File(java.io.File) IArchimateModel(com.archimatetool.model.IArchimateModel)

Aggregations

IArchimateModel (com.archimatetool.model.IArchimateModel)1 File (java.io.File)1 IOException (java.io.IOException)1 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)1 SimpleCredentialsStorage (org.archicontribs.modelrepository.authentication.SimpleCredentialsStorage)1 CloneInputDialog (org.archicontribs.modelrepository.dialogs.CloneInputDialog)1 ArchiRepository (org.archicontribs.modelrepository.grafico.ArchiRepository)1 GraficoModelLoader (org.archicontribs.modelrepository.grafico.GraficoModelLoader)1 IProgressMonitor (org.eclipse.core.runtime.IProgressMonitor)1 ProgressMonitorDialog (org.eclipse.jface.dialogs.ProgressMonitorDialog)1 GitAPIException (org.eclipse.jgit.api.errors.GitAPIException)1