package org.openflexo.builders; import java.io.File; import java.io.IOException; import java.util.logging.Level; import org.openflexo.builders.exception.MissingArgumentException; import org.openflexo.fps.CVSExplorable; import org.openflexo.fps.CVSExplorer; import org.openflexo.fps.CVSExplorerListener; import org.openflexo.fps.CVSFile; import org.openflexo.fps.CVSModule; import org.openflexo.fps.SharedProject; import org.openflexo.fps.action.CheckoutProject; import org.openflexo.toolbox.FileUtils; public class FlexoForceProjectMain extends FlexoProjectMergeMain implements CVSExplorerListener { public static void main(String[] args) { launch(FlexoForceProjectMain.class, args); } private boolean explorationIsDone = false; @Override protected void init(String[] args) throws MissingArgumentException { super.init(args); } @Override protected void doRun() { CVSFile.xmlDiff3MergeEnabled = true; File checkoutDir = checkoutProject(); File cvsProjectDirectory = searchProjectDirectory(checkoutDir); if (logger.isLoggable(Level.INFO)) { logger.info("CVS Project dir is: " + cvsProjectDirectory.getAbsolutePath()); } SharedProject.copyCVSFolders(cvsProjectDirectory, projectDirectory); touchProject(projectDirectory, System.currentTimeMillis()); SharedProject project = SharedProject.openProject(repositories, projectDirectory, cvsRepository, EDITOR); if (project == null) { setExitCodeCleanUpAndExit(PROJECT_NOT_FOUND); } checkProjectIsOpenable(); synchronizeProject(project); overrideConflictingFiles(); commitProject(); setExitCodeCleanUpAndExit(0); } private void touchProject(File projectDir, long touchTime) { File[] files = projectDir.listFiles(); for (int i = 0; i < files.length; i++) { File file = files[i]; file.setLastModified(touchTime); if (file.isDirectory() && !file.equals("CVS")) { touchProject(file, touchTime); } } } private File checkoutProject() { CVSModule module = cvsRepository.getModuleNamed(moduleName); if (module == null) { setExitCodeCleanUpAndExit(-1); } String localName = moduleName; if (localName.indexOf('/') > -1) { localName = localName.substring(localName.lastIndexOf('/') + 1); } exploreModules(module); File checkoutDirectory = null; try { checkoutDirectory = FileUtils.createTempDirectory(localName, null); checkoutDirectory = checkoutDirectory.getCanonicalFile(); } catch (IOException e) { e.printStackTrace(); setExitCodeCleanUpAndExit(LOCAL_IO_EXCEPTION); } CheckoutProject checkout = CheckoutProject.actionType.makeNewAction(module, null, EDITOR); checkout.setLocalDirectory(checkoutDirectory); checkout.setLocalName(localName); checkoutDirectory = new File(checkoutDirectory, localName); if (checkoutDirectory.exists()) { FileUtils.deleteDir(checkoutDirectory); } checkoutDirectory.mkdirs(); if (logger.isLoggable(Level.INFO)) { logger.info("Checkout directory is: " + checkoutDirectory.getAbsolutePath()); } checkout.doAction(); if (!checkout.hasActionExecutionSucceeded()) { handleActionFailed(checkout); } return checkoutDirectory; } @Override public void exploringFailed(CVSExplorable explorable, CVSExplorer explorer, Exception exception) { explorationIsDone = true; } @Override public void exploringSucceeded(CVSExplorable explorable, CVSExplorer explorer) { explorationIsDone = true; } private void exploreModules(CVSExplorable explorable) { if (explorable.getParent() != null) { exploreModules(explorable.getParent()); } explorationIsDone = false; explorable.explore(this); while (!explorationIsDone) { try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } } }