/*
* Freeplane - mind map editor
* Copyright (C) 2008 Dimitry Polivaev
*
* This file author is Dimitry Polivaev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.freeplane.view.swing.features.nodehistory;
import java.lang.ref.WeakReference;
import org.freeplane.features.map.NodeModel;
import org.freeplane.features.mode.Controller;
import org.freeplane.features.mode.ModeController;
import org.freeplane.view.swing.map.MapView;
import org.freeplane.view.swing.map.MapViewController;
import org.freeplane.view.swing.map.NodeView;
/**
* @author Dimitry Polivaev
* 13.12.2008
*/
class NodeHolder {
private final WeakReference<MapView> mMapView;
private final String mNodeId;
private boolean reachedByLink;
public NodeHolder(final NodeView pNode) {
mNodeId = pNode.getModel().createID();
final MapView mapView = pNode.getMap();
mMapView = new WeakReference<MapView>(mapView);
reachedByLink = false;
}
@Override
public boolean equals(final Object obj) {
if (!(obj instanceof NodeHolder)) {
return false;
}
final NodeHolder nodeHolder = (NodeHolder) obj;
return nodeHolder.mMapView.get() == mMapView.get() && nodeHolder.mNodeId.equals(mNodeId);
}
public MapView getHoldMapView() {
return mMapView.get();
}
MapView getMapView() {
final MapView mapView = mMapView.get();
final Controller controller = mapView.getModeController().getController();
final MapViewController mapViewManager = (MapViewController) controller.getMapViewManager();
for (final MapView m : mapViewManager.getMapViewVector()) {
if (m == mapView) {
return mapView;
}
}
return null;
}
ModeController getModeController() {
ModeController modeController = null;
final MapView mapView = getMapView();
if (mapView != null) {
modeController = mapView.getModeController();
}
return modeController;
}
/** @return null, if node not found. */
public NodeModel getNode() {
final MapView modeController = mMapView.get();
if (modeController != null) {
return modeController.getModel().getNodeForID(mNodeId);
}
return null;
}
@Override
public int hashCode() {
final MapView mapView = mMapView.get();
return mapView != null ? mapView.hashCode() * 37 : 0 + mNodeId.hashCode();
}
boolean isIdentical(final NodeView pNode) {
// BUGFIX: from Docear to avoid possible nullpointer
if(pNode == null || pNode.getModel() == null) return false;
final String id = pNode.getModel().createID();
final MapView mapView = pNode.getMap();
return mapView == mMapView.get() && id.equals(mNodeId);
}
protected boolean isReachedByLink() {
return reachedByLink;
}
protected void setReachedByLink(final boolean reachedByLink) {
this.reachedByLink = reachedByLink;
}
}