/******************************************************************************* * Copyright (c) 2017 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.windup.ui.internal.rules.xml; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.wst.sse.core.internal.provisional.IModelStateListener; import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; import org.jboss.tools.windup.model.domain.WorkspaceResourceUtils; import org.jboss.tools.windup.windup.CustomRuleProvider; import org.w3c.dom.Node; @SuppressWarnings("restriction") public class XMLRulesetFileOrchestrator { private TreeViewer treeViewer; private CustomRuleProvider ruleProvider; private IDOMModel model; private IModelStateListener modelListener; public XMLRulesetFileOrchestrator(TreeViewer treeViewer, CustomRuleProvider ruleProvider) { this.treeViewer = treeViewer; this.ruleProvider = ruleProvider; this.modelListener = createListener(); } public void connect() { if (this.model != null) { model.removeModelStateListener(modelListener); } model = XMLRulesetModelUtil.getModel(WorkspaceResourceUtils.getFile(ruleProvider.getLocationURI()), false); model.addModelStateListener(modelListener); } public List<Node> getRules() { IFile file = WorkspaceResourceUtils.getFile(ruleProvider.getLocationURI()); return XMLRulesetModelUtil.getRules(file); } public String getRulesetId() { return XMLRulesetModelUtil.getRulesetId(ruleProvider.getLocationURI()); } private void refresh() { model.removeModelStateListener(modelListener); if (!treeViewer.getTree().isDisposed()) { treeViewer.refresh(ruleProvider); } } private IModelStateListener createListener() { return new IModelStateListener() { @Override public void modelResourceMoved(IStructuredModel oldModel, IStructuredModel newModel) { refresh(); } @Override public void modelResourceDeleted(IStructuredModel theModel) { refresh(); } @Override public void modelReinitialized(IStructuredModel structuredModel) { refresh(); } @Override public void modelDirtyStateChanged(IStructuredModel model, boolean isDirty) { } @Override public void modelChanged(IStructuredModel theModel) { refresh(); } @Override public void modelAboutToBeReinitialized(IStructuredModel structuredModel) { } @Override public void modelAboutToBeChanged(IStructuredModel model) { } }; } }