/** * This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details. */ package edu.illinois.codingtracker.operations.references; import java.util.HashSet; import java.util.Set; import org.eclipse.jdt.core.IJavaProject; import edu.illinois.codingtracker.jdt.project.manipulation.JavaProjectHelper; import edu.illinois.codingtracker.operations.JavaProjectsUpkeeper; import edu.illinois.codingtracker.operations.OperationLexer; import edu.illinois.codingtracker.operations.OperationSymbols; import edu.illinois.codingtracker.operations.OperationTextChunk; import edu.illinois.codingtracker.operations.UserOperation; /** * * @author Stas Negara * */ public class ReferencingProjectsChangedOperation extends UserOperation { private String projectName; private final Set<String> referencingProjectNames= new HashSet<String>(); public ReferencingProjectsChangedOperation() { super(); } public ReferencingProjectsChangedOperation(String projectName, Set<String> referencingProjectNames) { super(); this.projectName= projectName; this.referencingProjectNames.addAll(referencingProjectNames); } @Override protected char getOperationSymbol() { return OperationSymbols.REFERENCING_PROJECTS_CHANGED_SYMBOL; } @Override public String getDescription() { return "Changed referencing projects"; } @Override protected void populateTextChunk(OperationTextChunk textChunk) { textChunk.append(projectName); textChunk.append(referencingProjectNames.size()); for (String referencingProjectName : referencingProjectNames) { textChunk.append(referencingProjectName); } } @Override protected void initializeFrom(OperationLexer operationLexer) { projectName= operationLexer.readString(); int referencingProjectsCount= operationLexer.readInt(); for (int i= 0; i < referencingProjectsCount; i++) { referencingProjectNames.add(operationLexer.readString()); } } @Override public void replay() throws Exception { IJavaProject javaProject= JavaProjectsUpkeeper.findOrCreateJavaProject(projectName); //First, remove all references from other projects to this project for (IJavaProject someJavaProject : JavaProjectsUpkeeper.getAllJavaProjects()) { JavaProjectHelper.removeFromClasspath(someJavaProject, javaProject.getPath()); } //Next, add this project to projects that are currently referencing it for (String referencingProjectName : referencingProjectNames) { IJavaProject referencingProject= JavaProjectsUpkeeper.findOrCreateJavaProject(referencingProjectName); JavaProjectHelper.addRequiredProject(referencingProject, javaProject); } } @Override public String toString() { StringBuffer sb= new StringBuffer(); sb.append("Project name: " + projectName + "\n"); sb.append("Referencing projects count: " + referencingProjectNames.size() + "\n"); for (String referencingProjectName : referencingProjectNames) { sb.append("Referencing project name: " + referencingProjectName + "\n"); } sb.append(super.toString()); return sb.toString(); } }