/******************************************************************************* * Copyright (c) 2008 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.smooks.configuration.validate; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.domain.EditingDomain; import org.jboss.tools.smooks.model.freemarker.BindTo; import org.jboss.tools.smooks.model.freemarker.FreemarkerPackage; import org.jboss.tools.smooks.model.javabean12.BeanType; import org.jboss.tools.smooks.model.javabean12.Javabean12Package; /** * @author Dart (dpeng@redhat.com) * */ public class DuplicatedBeanIDValidator extends AbstractValidator { private List<String> beanIdList = new ArrayList<String>(); /* * (non-Javadoc) * * @see * org.jboss.tools.smooks.configuration.validate.AbstractValidator#validate * (java.util.Collection, org.eclipse.emf.edit.domain.EditingDomain) */ @Override public List<Diagnostic> validate(Collection<?> selectedObjects, EditingDomain editingDomain) { List<Diagnostic> list = new ArrayList<Diagnostic>(); validateModel(selectedObjects, list);//, editingDomain) return list; } private boolean isDuplicateBeanId(String id){ if(id != null){ id = id.trim(); } return beanIdList.contains(id); } protected void validateModel(Collection<?> selectedObjects , List<Diagnostic> list){ for (Iterator<?> iterator = selectedObjects.iterator(); iterator.hasNext();) { Object object = (Object) iterator.next(); if (object instanceof BeanType) { String beanId = ((BeanType) object).getBeanId(); if(isDuplicateBeanId(beanId)){ list.add(newWaringDiagnostic(Messages.DuplicatedBeanIDValidator_Warning_Duplicate_Bean_ID + beanId, object, Javabean12Package.Literals.BEAN_TYPE__BEAN_ID)); } continue; } if (object instanceof BindTo) { String beanId = ((BindTo) object).getId(); if(isDuplicateBeanId(beanId)){ list.add(newWaringDiagnostic(Messages.DuplicatedBeanIDValidator_Warning_Duplicate_Bean_ID + beanId, object, FreemarkerPackage.Literals.BIND_TO__ID)); } continue; } if (object instanceof EObject) { validateModel(((EObject) object).eContents() , list); } } } protected void findDuplicatedBeanId(Collection<?> selectedObjects , List<String> idlist) { for (Iterator<?> iterator = selectedObjects.iterator(); iterator.hasNext();) { Object object = (Object) iterator.next(); if (object instanceof BeanType) { String beanId = ((BeanType) object).getBeanId(); if (beanId != null) { beanId = beanId.trim(); } if (idlist.contains(beanId)) { if (!beanIdList.contains(beanId)) { beanIdList.add(beanId); } } else { idlist.add(beanId); } continue; } if(object instanceof BindTo){ String beanId = ((BindTo) object).getId(); if (beanId != null) { beanId = beanId.trim(); } if (idlist.contains(beanId)) { if (!beanIdList.contains(beanId)) { beanIdList.add(beanId); } } else { idlist.add(beanId); } continue; } if (object instanceof EObject) { findDuplicatedBeanId(((EObject) object).eContents(),idlist); } } } public void initValidator(Collection<?> selectedObjects, EditingDomain editingDomain) { beanIdList.clear(); findDuplicatedBeanId(selectedObjects , new ArrayList<String>()); if(beanIdList.isEmpty()){ return ; } } }