/******************************************************************************
* Copyright (C) 2013 Fabio Zadrozny
*
* 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:
* Fabio Zadrozny <fabiofz@gmail.com> - initial API and implementation
******************************************************************************/
package org.python.pydev.editor.codecompletion.revisited;
import java.util.ArrayList;
import java.util.Map;
import java.util.Map.Entry;
import org.python.pydev.core.IInterpreterInfo;
import org.python.pydev.core.IInterpreterManager;
import org.python.pydev.plugin.PydevPlugin;
import org.python.pydev.shared_core.structure.Tuple;
public class ManagerInfoToUpdate {
private final Tuple<IInterpreterManager, IInterpreterInfo>[] managerAndInfos;
@SuppressWarnings("unchecked")
public ManagerInfoToUpdate(Map<IInterpreterManager, Map<String, IInterpreterInfo>> managerToNameToInfo) {
ArrayList<Object> lst = new ArrayList<>();
for (Entry<IInterpreterManager, Map<String, IInterpreterInfo>> entry : managerToNameToInfo
.entrySet()) {
for (Entry<String, IInterpreterInfo> entry2 : entry.getValue().entrySet()) {
lst.add(new Tuple<IInterpreterManager, IInterpreterInfo>(entry.getKey(), entry2.getValue()));
if (SynchSystemModulesManager.DEBUG) {
System.out.println("Will check: " + entry2.getKey());
}
}
}
managerAndInfos = lst.toArray(new Tuple[lst.size()]);
}
public Tuple<IInterpreterManager, IInterpreterInfo>[] getManagerAndInfos() {
return managerAndInfos;
}
/**
* Note that we'll have to check what we have internally against the current information in the settings for each
* interpreter (as this information may be just part of what's in the settings).
*/
public boolean somethingChanged() {
ManagerInfoToUpdate currentInfoInSettings = new ManagerInfoToUpdate(PydevPlugin
.getInterpreterManagerToInterpreterNameToInfo());
int len = managerAndInfos.length;
for (int i = 0; i < len; i++) {
Tuple<IInterpreterManager, IInterpreterInfo> tup1 = managerAndInfos[i];
boolean foundMatching = false;
for (Tuple<IInterpreterManager, IInterpreterInfo> tup2 : currentInfoInSettings.managerAndInfos) {
if (tup1.o1 == tup2.o1) {
if (tup1.o2.getName().equals(tup2.o2.getName())) {
if (tup1.o2.getModificationStamp() == tup2.o2.getModificationStamp()) {
foundMatching = true;
break; //break inner for
}
}
}
}
if (!foundMatching) {
if (SynchSystemModulesManager.DEBUG) {
System.out.println("Did not find match for: " + tup1.o2.getName());
}
return true; //if we didn't find a match, something changed
}
}
return false; //we found matches (including time) for all infos, so, nothing changed.
}
}