Skip to content
Snippets Groups Projects
Commit 1360a251 authored by Alberto Debiasi's avatar Alberto Debiasi
Browse files

Merge remote-tracking branch 'origin/master' into neon

Conflicts:
	plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/Checker.java
	plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerManager.java
	plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckersContainer.java

Change-Id: I82322bd32ff90a6e98bc9d5f51609ec7fcf3856a
parents 53a8e356 7c0e39f5
No related branches found
No related tags found
No related merge requests found
......@@ -103,5 +103,13 @@
<unit id="org.eclipse.epsilon.emf.feature.feature.group" version="0.0.0"/>
<repository location="http://download.eclipse.org/epsilon/updates/1.4"/>
</location>
<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
<unit id="eu.fbk.tools.sde.feature.feature.group" version="0.0.0"/>
<repository location="http://es-static.fbk.eu/tools/eclipse_sde_devel"/>
</location>
<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
<unit id="eu.fbk.eclipse.standardtools.feature.feature.group" version="0.0.0"/>
<repository location="http://es-static.fbk.eu/tools/eclipse_est_devel"/>
</location>
</locations>
</target>
......@@ -5,139 +5,191 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
******************************************************************************/
package org.polarsys.chess.checkers.core.checkerManager;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;
public abstract class Checker {
private static final Logger logger = Logger.getLogger(Checker.class);
// private static String pluginID = "org.polarsys.chess.checkers";
public final String unifiedName;
protected final Set<String> checkerTags;
protected final int registerPriority;
private ArrayList<Exception> errors = new ArrayList<Exception>();
protected Checker(String unifiedName, Set<String> checkerTags) {
this(unifiedName, checkerTags, 0);
}
public Checker(String unifiedName, Set<String> checkerTags, int registerPriority) {
this.unifiedName = unifiedName;
this.checkerTags = checkerTags;
this.registerPriority = registerPriority;
CheckerManager checkerManager = org.polarsys.chess.checkers.Activator.getCheckerManager();
logger.debug("register " + unifiedName);
checkerManager.getCheckersContainter().register(this);
}
public abstract List<CheckerMessage> check(IProgressMonitor monitor) throws Exception;
public abstract void init() throws Exception;
public void asyncCheck(boolean isFirstChecker) throws Exception {
CheckerManager checkerManager = org.polarsys.chess.checkers.Activator.getCheckerManager();
org.eclipse.uml2.uml.Package pack = EntityUtil.getInstance().getCurrentSystemView();
if(pack==null){
IFile file = EntityUtil.getInstance().getCurrentIFile();
System.out.println("file: "+file);
EntityUtil.getInstance().openCurrentModelIntoEditor(file);
}
IFile iFile = WorkspaceSynchronizer.getFile(EntityUtil.getInstance().getCurrentSystemView().eResource());
init();
logger.debug("running checker: "+unifiedName);
Job job = new Job("Checker Manager: " + unifiedName) {
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
errors = new ArrayList<Exception>();
List<CheckerMessage> messages = check(monitor);
if (messages != null) {
// checkerManager.deleteMarkers(iFile, unifiedName);
checkerManager.deleteProjectMarkers(iFile.getProject(), unifiedName);
checkerManager.addMessages(unifiedName, messages);
}
} catch (Exception e) {
e.printStackTrace();
logger.error("Checker '"+unifiedName+"' exception: "+e.getMessage());
return Status.CANCEL_STATUS;
}
if (monitor.isCanceled()) {
logger.warn("checker '" + unifiedName + "' isCanceled");
return Status.CANCEL_STATUS;
}
// use this to open a Shell in the UI thread
return Status.OK_STATUS;
}
};
job.setUser(isFirstChecker);
job.schedule();
}
// /**
// * Recursively returns all the files in the given container
// * @param container the IContainer
// * @return
// */
// private List<IFile> getProjectFiles(IContainer container) {
// final List<IFile> files = new ArrayList<IFile>();
// try {
// for (IResource member : container.members()) {
// if (member instanceof IContainer) {
// files.addAll(getProjectFiles((IContainer) member));
// } else if (member instanceof IFile) {
// files.add((IFile) member);
// }
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// return files;
// }
/*
* private void syncWithUI(Shell shell) { Display.getDefault().asyncExec(new
* Runnable() { public void run() { MessageDialog.openInformation(shell,
* "message", "completed!"); } }); }
*/
public boolean belongsTo(Set<String> checkersTags) {
for (String tag : checkersTags) {
if (checkerTags.contains(tag))
return true;
}
return false;
}
public String getUnifiedName() {
return unifiedName;
}
public Set<String> getCheckerTags() {
return checkerTags;
}
public void addError(Exception e){
errors.add(e);
}
}
package org.polarsys.chess.checkers.core.checkerManager;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;
import org.eclipse.uml2.uml.Package;
public abstract class Checker {
private static final Logger logger = Logger.getLogger(Checker.class);
public static String FAMILY = "checkers";
// private static String pluginID = "org.polarsys.chess.checkers";
public final String unifiedName;
protected final Set<String> checkerTags;
protected final int registerPriority;
private ArrayList<Exception> errors = new ArrayList<Exception>();
protected Checker(String unifiedName, Set<String> checkerTags) {
this(unifiedName, checkerTags, 0);
}
public Checker(String unifiedName, Set<String> checkerTags, int registerPriority) {
this.unifiedName = unifiedName;
this.checkerTags = checkerTags;
this.registerPriority = registerPriority;
CheckerManager checkerManager = org.polarsys.chess.checkers.Activator.getCheckerManager();
logger.debug("register " + unifiedName);
checkerManager.getCheckersContainter().register(this);
}
public abstract List<CheckerMessage> check(IProgressMonitor monitor) throws Exception;
public abstract void init() throws Exception;
public void asyncCheck(boolean isFirstChecker) throws Exception {
CheckerManager checkerManager = org.polarsys.chess.checkers.Activator.getCheckerManager();
org.eclipse.uml2.uml.Package pack = EntityUtil.getInstance().getCurrentSystemView();
if(pack == null) {
IFile file = EntityUtil.getInstance().getCurrentIFile();
logger.debug("file: "+file);
EntityUtil.getInstance().openCurrentModelIntoEditor(file);
}
IFile iFile = WorkspaceSynchronizer.getFile(EntityUtil.getInstance().getCurrentSystemView().eResource());
init();
logger.debug("running checker: "+unifiedName);
Job job = new Job("Checker Manager: " + unifiedName) {
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
errors = new ArrayList<Exception>();
List<CheckerMessage> messages = check(monitor);
if (messages != null) {
// checkerManager.deleteMarkers(iFile, unifiedName);
checkerManager.deleteProjectMarkers(iFile.getProject(), unifiedName);
checkerManager.addMessages(unifiedName, messages);
}
} catch (Exception e) {
e.printStackTrace();
logger.error("Checker '"+unifiedName+"' exception: "+e.getMessage());
return Status.CANCEL_STATUS;
}
if (monitor.isCanceled()) {
logger.warn("checker '" + unifiedName + "' isCanceled");
return Status.CANCEL_STATUS;
}
// use this to open a Shell in the UI thread
return Status.OK_STATUS;
}
};
job.setUser(isFirstChecker);
job.schedule();
}
/**
* Just runs the check() method and returns the scheduled job.
* @param pack
* @return
*/
public Job syncCheck(Package pack) {
CheckerManager checkerManager = org.polarsys.chess.checkers.Activator.getCheckerManager();
IFile iFile = WorkspaceSynchronizer.getFile(pack.eResource());
logger.debug("running checker: " + unifiedName);
Job job = new Job("Checker Manager: " + unifiedName) {
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
errors = new ArrayList<Exception>();
List<CheckerMessage> messages = check(monitor);
checkerManager.updateCheckerStatus(unifiedName, true);
if (messages != null) {
checkerManager.deleteProjectMarkers(iFile.getProject(), unifiedName);
checkerManager.addMessages(unifiedName, messages);
}
} catch (Exception e) {
checkerManager.updateCheckerStatus(unifiedName, true);
e.printStackTrace();
logger.error("Checker '" + unifiedName + "' exception: " + e.getMessage());
return Status.CANCEL_STATUS;
}
if (monitor.isCanceled()) {
checkerManager.updateCheckerStatus(unifiedName, true);
logger.warn("checker '" + unifiedName + "' isCanceled");
return Status.CANCEL_STATUS;
}
// use this to open a Shell in the UI thread
return Status.OK_STATUS;
}
@Override
public boolean belongsTo(Object family) {
if (Checker.FAMILY.equals(family)) {
return true;
} else {
return false;
}
}
};
job.schedule();
return job;
}
// /**
// * Recursively returns all the files in the given container
// * @param container the IContainer
// * @return
// */
// private List<IFile> getProjectFiles(IContainer container) {
// final List<IFile> files = new ArrayList<IFile>();
// try {
// for (IResource member : container.members()) {
// if (member instanceof IContainer) {
// files.addAll(getProjectFiles((IContainer) member));
// } else if (member instanceof IFile) {
// files.add((IFile) member);
// }
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// return files;
// }
/*
* private void syncWithUI(Shell shell) { Display.getDefault().asyncExec(new
* Runnable() { public void run() { MessageDialog.openInformation(shell,
* "message", "completed!"); } }); }
*/
public boolean belongsTo(Set<String> checkersTags) {
for (String tag : checkersTags) {
if (checkerTags.contains(tag))
return true;
}
return false;
}
public String getUnifiedName() {
return unifiedName;
}
public Set<String> getCheckerTags() {
return checkerTags;
}
public void addError(Exception e){
errors.add(e);
}
}
......@@ -5,225 +5,275 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
******************************************************************************/
package org.polarsys.chess.checkers.core.checkerManager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EValidator;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.papyrus.views.modelexplorer.ModelExplorerPage;
import org.eclipse.papyrus.views.modelexplorer.ModelExplorerPageBookView;
import org.eclipse.papyrus.views.modelexplorer.ModelExplorerView;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.IPage;
import org.eclipse.uml2.uml.NamedElement;
import org.eclipse.xtext.nodemodel.INode;
import org.polarsys.chess.service.gui.utils.ReportProblemsUtil;
public class CheckerManager {
private static final Logger logger = Logger.getLogger(CheckerManager.class);
private static final String CHECKER_NAME = "checkerName";
List<CheckersContainer> checkersContainers;
List<CheckerMessage> messages;
HashMap<String, Boolean> checkerStatus;
// ModelExplorerPageBookView modelExplorerPageBookView;
// ModelExplorerView modelExplorerView ;
// test test;
public CheckerManager() {
logger.debug("Instantiate CheckerManager");
this.checkersContainers = new ArrayList<CheckersContainer>();
new CheckersContainer(this);
// checkersContainers.add(checkersContainer);
}
public void run(Set<String> selectedCheckersTags) throws Exception {
logger.debug("run");
checkerStatus = new HashMap<String, Boolean>();
messages = new ArrayList<CheckerMessage>();
// modelExplorerPageBookView = getModelExplorerPageBookView();
// modelExplorerView = getModelExplorerView();
// test = new test(modelExplorerView);
for (CheckersContainer checkersContainer : checkersContainers) {
logger.debug("run checkersContainer");
checkersContainer.run(selectedCheckersTags);
}
}
public void register(CheckersContainer checkersContainer) {
logger.debug("register CheckersContainer");
this.checkersContainers.add(checkersContainer);
}
public Set<String> getTags() {
Set<String> tags = new HashSet<String>();
for (CheckersContainer containter : checkersContainers) {
tags.addAll(containter.getTags());
}
return tags;
}
public CheckersContainer getCheckersContainter() {
return checkersContainers.get(0);
}
public void addMessages(String unifiedName, List<CheckerMessage> newMessages) throws Exception {
// this.messages.addAll(newMessages);
checkerStatus.put(unifiedName, true);
// logger.debug("addMessages '" + unifiedName + "' : " +
// newMessages.size());
/*
* for (Boolean value : checkerStatus.values()) { if
* (value.booleanValue() == false) return; }
*/
// IViewPart modelexplorer =
// PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
// .showView(ModelExplorerPageBookView.VIEW_ID);
// modelExplorerView = getModelExplorerPageBookView();
// System.out.println("modelexplorer: "+modelExplorerView);
// Set<IFile> iFiles = extractIFiles(newMessages);
// for (IFile iFile : iFiles) {
// deleteMarkers(iFile, unifiedName);
// }
for (CheckerMessage msn : newMessages) {
if (msn.object != null && msn.object instanceof EObject) {
IMarker marker = msn.file.createMarker(EValidator.MARKER);
marker.setAttribute(CHECKER_NAME, msn.checkerName);
marker.setAttribute(IMarker.MESSAGE, msn.message);
String location = EcoreUtil.getURI((EObject) msn.object).toString();
if (msn.object instanceof NamedElement) {
location = ((NamedElement) msn.object).getQualifiedName();
}
marker.setAttribute(IMarker.LOCATION, location);
marker.setAttribute(IMarker.SEVERITY, msn.severity);
marker.setAttribute(EValidator.URI_ATTRIBUTE, EcoreUtil.getURI((EObject) msn.object).toString());
} else if (msn.object != null && msn.object instanceof INode) {
try {
final INode node = (INode) msn.object;
if (msn.severity == IMarker.SEVERITY_INFO) {
ReportProblemsUtil.reportInfo(msn.file, CHECKER_NAME, msn.checkerName, msn.message, node.getStartLine(),
node.getOffset(), node.getEndOffset());
} else if (msn.severity == IMarker.SEVERITY_WARNING) {
ReportProblemsUtil.reportWarning(msn.file, CHECKER_NAME, msn.checkerName, msn.message, node.getStartLine(),
node.getOffset(), node.getEndOffset());
} else if (msn.severity == IMarker.SEVERITY_ERROR) {
ReportProblemsUtil.reportError(msn.file, CHECKER_NAME, msn.checkerName, msn.message, node.getStartLine(),
node.getOffset(), node.getEndOffset());
}
} catch (NullPointerException | CoreException e) {
e.printStackTrace();
}
}
}
}
private Set<IFile> extractIFiles(List<CheckerMessage> checkerMessages) {
Set<IFile> iFiles = new HashSet<IFile>();
if (checkerMessages != null) {
for (CheckerMessage checkerMessage : checkerMessages) {
if (checkerMessage.file != null) {
iFiles.add(checkerMessage.file);
}
}
}
return iFiles;
}
void deleteMarkers(IFile file, String checkerName) throws CoreException {
IMarker[] markers = file.findMarkers(EValidator.MARKER, false, IResource.DEPTH_ONE);
for (IMarker marker : markers) {
if (marker != null && marker.exists() && marker.getAttribute(CHECKER_NAME, "").equals(checkerName)) {
marker.delete();
}
}
}
/**
* Deletes all the matching markers inside the given project.
* @param project the active project
* @param checkerName the name of the creating checker
* @throws CoreException
*/
void deleteProjectMarkers(IProject project, String checkerName) throws CoreException {
IMarker[] markers = project.findMarkers(null, false, IResource.DEPTH_INFINITE);
for (IMarker marker : markers) {
if (marker != null && marker.exists() && marker.getAttribute(CHECKER_NAME, "").equals(checkerName)) {
marker.delete();
}
}
}
private ModelExplorerPageBookView getModelExplorerPageBookView() {
IWorkbench workbench = PlatformUI.getWorkbench();
System.out.println("workbench: " + workbench);
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
System.out.println("window: " + window);
IWorkbenchPage workbenchPage = window.getActivePage();
System.out.println("workbenchPage: " + workbenchPage);
IViewPart modelExplorerViewPart = null;
for (IViewPart view : workbenchPage.getViews()) {
System.out.println("view: " + view.getTitle());
}
try {
modelExplorerViewPart = window.getActivePage().showView(ModelExplorerPageBookView.VIEW_ID);
} catch (PartInitException ex) {
ex.printStackTrace(System.out);
}
ModelExplorerPageBookView view = (ModelExplorerPageBookView) modelExplorerViewPart;
return view;
}
private ModelExplorerView getModelExplorerView() {
ModelExplorerPageBookView view = getModelExplorerPageBookView();
IPage currentPage = view.getCurrentPage();
ModelExplorerPage page = (ModelExplorerPage) currentPage;
IViewPart viewer = page.getViewer();
ModelExplorerView modelExplorerView = (ModelExplorerView) viewer;
return modelExplorerView;
}
public void updateCheckerStatus(String unifiedName, boolean b) {
checkerStatus.put(unifiedName, b);
}
}
package org.polarsys.chess.checkers.core.checkerManager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EValidator;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.papyrus.views.modelexplorer.ModelExplorerPage;
import org.eclipse.papyrus.views.modelexplorer.ModelExplorerPageBookView;
import org.eclipse.papyrus.views.modelexplorer.ModelExplorerView;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.IPage;
import org.eclipse.uml2.uml.NamedElement;
import org.eclipse.uml2.uml.Package;
import org.eclipse.xtext.nodemodel.INode;
import org.polarsys.chess.service.gui.utils.ReportProblemsUtil;
public class CheckerManager {
private static final Logger logger = Logger.getLogger(CheckerManager.class);
private static final String CHECKER_NAME = "checkerName";
List<CheckersContainer> checkersContainers;
List<CheckerMessage> messages;
HashMap<String, Boolean> checkerStatus;
// ModelExplorerPageBookView modelExplorerPageBookView;
// ModelExplorerView modelExplorerView ;
// test test;
public CheckerManager() {
logger.debug("Instantiate CheckerManager");
this.checkersContainers = new ArrayList<CheckersContainer>();
new CheckersContainer(this);
// checkersContainers.add(checkersContainer);
}
public void run(Set<String> selectedCheckersTags) throws Exception {
logger.debug("run");
checkerStatus = new HashMap<String, Boolean>();
messages = new ArrayList<CheckerMessage>();
// modelExplorerPageBookView = getModelExplorerPageBookView();
// modelExplorerView = getModelExplorerView();
// test = new test(modelExplorerView);
for (CheckersContainer checkersContainer : checkersContainers) {
logger.debug("run checkersContainer");
checkersContainer.run(selectedCheckersTags);
}
}
/**
* Launches the init() of the various checkerContainers.
* @param selectedCheckersTags
* @throws Exception
*/
public void initSync(Set<String> selectedCheckersTags) throws Exception {
logger.debug("initSync");
for (CheckersContainer checkersContainer : checkersContainers) {
logger.debug("init checkersContainer");
checkersContainer.initSync(selectedCheckersTags);
}
}
/**
* Launches the check() of the various checkerContainers and waits for their finish.
* @param selectedCheckersTags
* @param pkg
* @return
*/
public List<Exception> checkSync(Set<String> selectedCheckersTags, Package pkg, IProgressMonitor monitor) {
logger.debug("runSync");
final List<Exception> errors = new ArrayList<Exception>();
checkerStatus = new HashMap<String, Boolean>();
messages = new ArrayList<CheckerMessage>();
final List<Job> jobs = new ArrayList<Job>();
// Start all the checks()
for (CheckersContainer checkersContainer : checkersContainers) {
logger.debug("run checkersContainer");
jobs.addAll(checkersContainer.checkSync(selectedCheckersTags, pkg));
}
// Wait for the checks to finish
try {
Job.getJobManager().join(Checker.FAMILY, monitor);
} catch (OperationCanceledException | InterruptedException e1) {
logger.debug("Checker execution interrupted");
for (Job job : jobs) {
job.cancel();
}
errors.add(new Exception("Esecuzione checker interrotta"));
e1.printStackTrace();
}
return errors;
}
public void register(CheckersContainer checkersContainer) {
logger.debug("register CheckersContainer");
this.checkersContainers.add(checkersContainer);
}
public Set<String> getTags() {
Set<String> tags = new HashSet<String>();
for (CheckersContainer containter : checkersContainers) {
tags.addAll(containter.getTags());
}
return tags;
}
public CheckersContainer getCheckersContainter() {
return checkersContainers.get(0);
}
public void addMessages(String unifiedName, List<CheckerMessage> newMessages) throws Exception {
// this.messages.addAll(newMessages);
checkerStatus.put(unifiedName, true);
// logger.debug("addMessages '" + unifiedName + "' : " +
// newMessages.size());
/*
* for (Boolean value : checkerStatus.values()) { if
* (value.booleanValue() == false) return; }
*/
// IViewPart modelexplorer =
// PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
// .showView(ModelExplorerPageBookView.VIEW_ID);
// modelExplorerView = getModelExplorerPageBookView();
// System.out.println("modelexplorer: "+modelExplorerView);
// Set<IFile> iFiles = extractIFiles(newMessages);
// for (IFile iFile : iFiles) {
// deleteMarkers(iFile, unifiedName);
// }
for (CheckerMessage msn : newMessages) {
if (msn.object != null && msn.object instanceof EObject) {
IMarker marker = msn.file.createMarker(EValidator.MARKER);
marker.setAttribute(CHECKER_NAME, msn.checkerName);
marker.setAttribute(IMarker.MESSAGE, msn.message);
String location = EcoreUtil.getURI((EObject) msn.object).toString();
if (msn.object instanceof NamedElement) {
location = ((NamedElement) msn.object).getQualifiedName();
}
marker.setAttribute(IMarker.LOCATION, location);
marker.setAttribute(IMarker.SEVERITY, msn.severity);
marker.setAttribute(EValidator.URI_ATTRIBUTE, EcoreUtil.getURI((EObject) msn.object).toString());
} else if (msn.object != null && msn.object instanceof INode) {
try {
final INode node = (INode) msn.object;
if (msn.severity == IMarker.SEVERITY_INFO) {
ReportProblemsUtil.reportInfo(msn.file, CHECKER_NAME, msn.checkerName, msn.message, node.getStartLine(),
node.getOffset(), node.getEndOffset());
} else if (msn.severity == IMarker.SEVERITY_WARNING) {
ReportProblemsUtil.reportWarning(msn.file, CHECKER_NAME, msn.checkerName, msn.message, node.getStartLine(),
node.getOffset(), node.getEndOffset());
} else if (msn.severity == IMarker.SEVERITY_ERROR) {
ReportProblemsUtil.reportError(msn.file, CHECKER_NAME, msn.checkerName, msn.message, node.getStartLine(),
node.getOffset(), node.getEndOffset());
}
} catch (NullPointerException | CoreException e) {
e.printStackTrace();
}
}
}
}
private Set<IFile> extractIFiles(List<CheckerMessage> checkerMessages) {
Set<IFile> iFiles = new HashSet<IFile>();
if (checkerMessages != null) {
for (CheckerMessage checkerMessage : checkerMessages) {
if (checkerMessage.file != null) {
iFiles.add(checkerMessage.file);
}
}
}
return iFiles;
}
void deleteMarkers(IFile file, String checkerName) throws CoreException {
IMarker[] markers = file.findMarkers(EValidator.MARKER, false, IResource.DEPTH_ONE);
for (IMarker marker : markers) {
if (marker != null && marker.exists() && marker.getAttribute(CHECKER_NAME, "").equals(checkerName)) {
marker.delete();
}
}
}
/**
* Deletes all the matching markers inside the given project.
* @param project the active project
* @param checkerName the name of the creating checker
* @throws CoreException
*/
void deleteProjectMarkers(IProject project, String checkerName) throws CoreException {
IMarker[] markers = project.findMarkers(null, false, IResource.DEPTH_INFINITE);
for (IMarker marker : markers) {
if (marker != null && marker.exists() && marker.getAttribute(CHECKER_NAME, "").equals(checkerName)) {
marker.delete();
}
}
}
private ModelExplorerPageBookView getModelExplorerPageBookView() {
IWorkbench workbench = PlatformUI.getWorkbench();
System.out.println("workbench: " + workbench);
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
System.out.println("window: " + window);
IWorkbenchPage workbenchPage = window.getActivePage();
System.out.println("workbenchPage: " + workbenchPage);
IViewPart modelExplorerViewPart = null;
for (IViewPart view : workbenchPage.getViews()) {
System.out.println("view: " + view.getTitle());
}
try {
modelExplorerViewPart = window.getActivePage().showView(ModelExplorerPageBookView.VIEW_ID);
} catch (PartInitException ex) {
ex.printStackTrace(System.out);
}
ModelExplorerPageBookView view = (ModelExplorerPageBookView) modelExplorerViewPart;
return view;
}
private ModelExplorerView getModelExplorerView() {
ModelExplorerPageBookView view = getModelExplorerPageBookView();
IPage currentPage = view.getCurrentPage();
ModelExplorerPage page = (ModelExplorerPage) currentPage;
IViewPart viewer = page.getViewer();
ModelExplorerView modelExplorerView = (ModelExplorerView) viewer;
return modelExplorerView;
}
public void updateCheckerStatus(String unifiedName, boolean b) {
checkerStatus.put(unifiedName, b);
}
}
......@@ -5,75 +5,104 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
******************************************************************************/
package org.polarsys.chess.checkers.core.checkerManager;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import org.apache.log4j.Logger;
public class CheckersContainer {
private static final Logger logger = Logger.getLogger(CheckersContainer.class);
List<Checker> checkers;
CheckerManager checkerManager;
public CheckersContainer(CheckerManager checkerManager) {
this.checkers = new ArrayList<Checker>();
this.checkerManager = checkerManager;
checkerManager.register(this);
}
public void run(Set<String> checkersTags) throws Exception {
boolean isFirstChecker = true;
for (Checker checker : checkers) {
checkerManager.updateCheckerStatus(checker.unifiedName, false);
if (checker.belongsTo(checkersTags)) {
logger.debug("run " + checker.getUnifiedName());
checker.asyncCheck(isFirstChecker);
isFirstChecker=false;
}
}
}
public void register(Checker checker) {
Optional<Checker> alreadyRegisteredChecker = find(this.checkers,checker.unifiedName);
if(!alreadyRegisteredChecker.isPresent()){
logger.debug("register checker not present: "+checker.registerPriority);
this.checkers.add(checker);
}else if((alreadyRegisteredChecker.get().registerPriority < checker.registerPriority)){
logger.debug("register checker already registered with priority: "+alreadyRegisteredChecker.get().registerPriority);
logger.debug("checker to register with priority: "+checker.registerPriority);
this.checkers.remove(alreadyRegisteredChecker.get());
this.checkers.add(checker);
//return;
}
//this.checkers.add(checker);
}
public Optional<Checker> find(final List<Checker> list, final String name){
return list.stream().filter(o -> o.unifiedName.equals(name)).findFirst();
}
public Collection<? extends String> getTags() {
Set<String> tags = new HashSet<String>();
for (Checker checker : checkers) {
tags.addAll(checker.getCheckerTags());
}
return tags;
}
}
package org.polarsys.chess.checkers.core.checkerManager;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.uml2.uml.Package;
public class CheckersContainer {
private static final Logger logger = Logger.getLogger(CheckersContainer.class);
List<Checker> checkers;
CheckerManager checkerManager;
public CheckersContainer(CheckerManager checkerManager) {
this.checkers = new ArrayList<Checker>();
this.checkerManager = checkerManager;
checkerManager.register(this);
}
public void run(Set<String> checkersTags) throws Exception {
boolean isFirstChecker = true;
for (Checker checker : checkers) {
checkerManager.updateCheckerStatus(checker.unifiedName, false);
if (checker.belongsTo(checkersTags)) {
logger.debug("run " + checker.getUnifiedName());
checker.asyncCheck(isFirstChecker);
isFirstChecker=false;
}
}
}
/**
* Runs the init() of the selected checkers.
* @param checkersTags
* @throws Exception
*/
public void initSync(Set<String> checkersTags) throws Exception {
for (Checker checker : checkers) {
if (checker.belongsTo(checkersTags)) {
logger.debug("init " + checker.getUnifiedName());
checker.init();
}
}
}
/**
* Runs the check() of the selected checkers and returns the scheduled jobs.
* @param checkersTags
* @return the list of scheduled jobs
*/
public List<Job> checkSync(Set<String> checkersTags, Package pkg) {
final List<Job> jobs = new ArrayList<Job>();
for (Checker checker : checkers) {
checkerManager.updateCheckerStatus(checker.unifiedName, false);
if (checker.belongsTo(checkersTags)) {
logger.debug("run " + checker.getUnifiedName());
jobs.add(checker.syncCheck(pkg));
}
}
return jobs;
}
public void register(Checker checker) {
Optional<Checker> alreadyRegisteredChecker = find(this.checkers,checker.unifiedName);
if(!alreadyRegisteredChecker.isPresent()){
logger.debug("register checker not present: "+checker.registerPriority);
this.checkers.add(checker);
}else if((alreadyRegisteredChecker.get().registerPriority < checker.registerPriority)){
logger.debug("register checker already registered with priority: "+alreadyRegisteredChecker.get().registerPriority);
logger.debug("checker to register with priority: "+checker.registerPriority);
this.checkers.remove(alreadyRegisteredChecker.get());
this.checkers.add(checker);
//return;
}
//this.checkers.add(checker);
}
public Optional<Checker> find(final List<Checker> list, final String name){
return list.stream().filter(o -> o.unifiedName.equals(name)).findFirst();
}
public Collection<? extends String> getTags() {
Set<String> tags = new HashSet<String>();
for (Checker checker : checkers) {
tags.addAll(checker.getCheckerTags());
}
return tags;
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment