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();
}
}
});
}
Aggregations