/******************************************************************************* * 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.model.domain; import java.util.List; import javax.inject.Inject; import org.eclipse.e4.core.di.annotations.Creatable; import org.eclipse.e4.core.services.events.IEventBroker; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.util.EContentAdapter; import org.jboss.tools.windup.windup.CustomRuleProvider; import org.jboss.tools.windup.windup.WindupPackage; import com.google.common.collect.Lists; @Creatable public class WindupDomainListener extends EContentAdapter { @Inject private IEventBroker broker; @SuppressWarnings("unchecked") @Override public void notifyChanged(Notification notification) { super.notifyChanged(notification); if (notification.isTouch()) { return; } Object feature = notification.getFeature(); if (feature != null && feature == WindupPackage.eINSTANCE.getWindupModel_CustomRuleRepositories()) { RulesetChange change = null; if (notification.getEventType() == Notification.REMOVE_MANY || notification.getEventType() == Notification.REMOVE) { change = new RulesetChange(Lists.newArrayList(), true); } else if (notification.getEventType() == Notification.ADD_MANY) { List<CustomRuleProvider> newValues = (List<CustomRuleProvider>)notification.getNewValue(); List<CustomRuleProvider> added = Lists.newArrayList(newValues); change = new RulesetChange(added, false); } else if (notification.getEventType() == Notification.ADD) { List<CustomRuleProvider> added = Lists.newArrayList((CustomRuleProvider)notification.getNewValue()); change = new RulesetChange(added, false); } if (change != null) { broker.send(WindupConstants.CUSTOM_RULESET_CHANGED, change); } } } public static class RulesetChange { private final List<CustomRuleProvider> providers; private final boolean isDelete; public RulesetChange(List<CustomRuleProvider> providers, boolean isDelete) { this.providers = providers; this.isDelete = isDelete; } public List<CustomRuleProvider> getProviders() { return providers; } public boolean isDelete() { return isDelete; } } }