| 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.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 == 0) { |
| ReportProblemsUtil.reportInfo(msn.file, msn.message, node.getStartLine(), |
| node.getOffset(), node.getEndOffset()); |
| } else if (msn.severity == 1) { |
| ReportProblemsUtil.reportWarning(msn.file, msn.message, node.getStartLine(), |
| node.getOffset(), node.getEndOffset()); |
| } else if (msn.severity == 2) { |
| ReportProblemsUtil.reportError(msn.file, 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(); |
| } |
| } |
| |
| } |
| |
| 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); |
| } |
| |
| } |