/******************************************************************************* * Copyright © 2005, 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are 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: * IBM Corporation - initial API and implementation * *******************************************************************************/ package org.eclipse.edt.ide.core.internal.lookup; import java.util.Arrays; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Set; /** * * A FileInfoDifferencer is used to compare two different FileInfo objects and report the changes between the two * * @author svihovec * */ public class FileInfoDifferencer { private IFileInfoDifferenceNotificationRequestor requestor; public FileInfoDifferencer(IFileInfoDifferenceNotificationRequestor requestor){ this.requestor = requestor; } /** * Find differences between the previous FileInfo and the current FileInfo. * * @param previousVersion * @param currentVersion */ synchronized public void findDifferences(IFileInfo previousVersion, IFileInfo currentVersion){ Set previousVersionPartNames = new LinkedHashSet(previousVersion.getPartNames()); Set currentVersionPartNames = currentVersion.getPartNames(); for (Iterator iter = currentVersionPartNames.iterator(); iter.hasNext();) { String partName = (String) iter.next(); if(previousVersionPartNames.contains(partName)){ previousVersionPartNames.remove(partName); if((previousVersion.getPartRange(partName).getLength() != currentVersion.getPartRange(partName).getLength()) || (previousVersion.getPartRange(partName).getOffset() != currentVersion.getPartRange(partName).getOffset())){ requestor.partChanged(partName); }else if(!Arrays.equals(previousVersion.getMD5Key(partName), currentVersion.getMD5Key(partName))){ requestor.partChanged(partName); } }else{ requestor.partAdded(partName); } } for (Iterator iter = previousVersionPartNames.iterator(); iter.hasNext();) { String partName = (String) iter.next(); requestor.partRemoved(partName); } } }