/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.geoforge.worldwindecl.render;
import gov.nasa.worldwind.avlist.AVKey;
import gov.nasa.worldwind.geom.Position;
import java.beans.PropertyChangeListener;
import java.util.HashMap;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import org.geoforge.java.util.logging.filehandler.FileHandlerLogger;
import org.geoforge.java.lang.string.GfrUtlString;
import org.geoforge.mdldat.event.GfrEvtMdlIdDatAddedLloVarImg;
import org.geoforge.mdldat.event.GfrEvtMdlIdDatRemovedAllLloImgs;
import org.geoforge.mdldat.event.GfrEvtMdlIdDatRemovedLloVarImg;
import org.geoforge.mdldat.event.GfrEvtMdlIdDatRenamedLloVar;
import org.geoforge.mdldatecl.GfrMdlDatIdObjTloEclSpn;
import org.geoforge.mdldspecl.render.wwd.GfrMdlDspRndWwdEarthShpDimOnePointEclSpn;
import org.geoforge.worldwind.awt.annotation.GfrCtrAnnCntImgs;
import org.geoforge.worldwind.handler.IGfrHandlerPhotoAlbumRender;
import org.geoforge.worldwind.render.GfrRndPointPlacemarkCircleLloAbs;
import org.geoforge.wrpbasprssynecl.GfrWrpBasSynObjNameTloEclSpn;
/**
*
* @author robert
*
* ???
*/
public class GfrRndPointPlacemarkCircleLloSpn extends GfrRndPointPlacemarkCircleLloAbs implements
IGfrHandlerPhotoAlbumRender
{
// ----
// begin: instantiate logger for this class
final private static Logger _LOGGER_ = Logger.getLogger(GfrRndPointPlacemarkCircleLloSpn.class.getName());
static
{
GfrRndPointPlacemarkCircleLloSpn._LOGGER_.addHandler(FileHandlerLogger.s_getInstance());
}
// end: instantiate logger for this class
// ----
public GfrRndPointPlacemarkCircleLloSpn(
PropertyChangeListener lstShouldRedraw,
String strId,
String strName,
Position pos)
throws Exception
{
super(lstShouldRedraw, strId, strName, pos,
27d // douScale
);
GfrMdlDatIdObjTloEclSpn.getInstance().addObserver((Observer) this);
GfrMdlDspRndWwdEarthShpDimOnePointEclSpn.getInstance().addObserver((Observer) this);
// ---
List<String> lstPathAbsImages = GfrWrpBasSynObjNameTloEclSpn.getInstance().getPathAbsoluteImages(strId);
HashMap<String, String> mapSourceToTitle = GfrWrpBasSynObjNameTloEclSpn.getInstance().getMapPathAbsToNameImages(strId);
_updateImagesAnnotation(lstPathAbsImages, mapSourceToTitle);
}
@Override
public void destroy()
{
GfrMdlDatIdObjTloEclSpn.getInstance().deleteObserver((Observer) this);
GfrMdlDspRndWwdEarthShpDimOnePointEclSpn.getInstance().deleteObserver((Observer) this);
super.destroy();
}
@Override
public void _updateImagesAnnotation(
List<String> lstPathAbsImages,
HashMap<String, String> mapSourceToTitle) throws Exception
{
if (lstPathAbsImages == null || lstPathAbsImages.isEmpty())
{
_clearImagesAnnotation_();
return;
}
if (mapSourceToTitle == null || mapSourceToTitle.isEmpty())
{
_clearImagesAnnotation_();
return;
}
if (mapSourceToTitle.size() != mapSourceToTitle.size())
{
String strError = "mapSourceToTitle.size() != mapSourceToTitle.size()";
GfrRndPointPlacemarkCircleLloSpn._LOGGER_.severe(strError);
throw new Exception(strError);
}
String title = "dummy title";
super.setValue(AVKey.DATA_TYPE, GfrCtrAnnCntImgs.IMAGES);
super.setValue(AVKey.TITLE, title);
super.setValue(AVKey.URL, (Object) lstPathAbsImages);
super.setValue(GfrCtrAnnCntImgs.KEY_MAP_SOURCE_TO_TITLE, (Object) mapSourceToTitle);
}
@Override
public void _clearImagesAnnotation_() throws Exception
{
super.setValue(AVKey.DATA_TYPE, "_void");
}
@Override
public void _updateImagesAnnotation() throws Exception
{
_updateImagesAnnotation(
GfrWrpBasSynObjNameTloEclSpn.getInstance().getPathAbsoluteImages(super.getIdObjectGeoforgeWwdEarth()),
GfrWrpBasSynObjNameTloEclSpn.getInstance().getMapPathAbsToNameImages(super.getIdObjectGeoforgeWwdEarth()));
}
@Override
public void update(Observable obs, Object objEvt)
{
// beg images
try
{
if (objEvt instanceof GfrEvtMdlIdDatRemovedLloVarImg)
{
GfrEvtMdlIdDatRemovedLloVarImg evt = (GfrEvtMdlIdDatRemovedLloVarImg) objEvt;
String strIdParent = evt.getIdParent();
if (strIdParent.compareTo(super.getIdObjectGeoforgeWwdEarth()) != 0)
return;
_updateImagesAnnotation();
return;
}
if (objEvt instanceof GfrEvtMdlIdDatAddedLloVarImg)
{
GfrEvtMdlIdDatAddedLloVarImg evt = (GfrEvtMdlIdDatAddedLloVarImg) objEvt;
String strIdParent = evt.getIdParent();
if (strIdParent.compareTo(super.getIdObjectGeoforgeWwdEarth()) != 0)
return;
_updateImagesAnnotation();
return;
}
if (objEvt instanceof GfrEvtMdlIdDatRenamedLloVar)
{
GfrEvtMdlIdDatRenamedLloVar evt = (GfrEvtMdlIdDatRenamedLloVar) objEvt;
String strIdParent = evt.getIdParent();
if (strIdParent.compareTo(super.getIdObjectGeoforgeWwdEarth()) != 0)
return;
_updateImagesAnnotation();
return;
}
//
if (objEvt instanceof GfrEvtMdlIdDatRemovedAllLloImgs)
{
GfrEvtMdlIdDatRemovedAllLloImgs evt = (GfrEvtMdlIdDatRemovedAllLloImgs) objEvt;
String strIdParent = evt.getId();
if (strIdParent.compareTo(super.getIdObjectGeoforgeWwdEarth()) != 0)
return;
_clearImagesAnnotation_();
return;
}
}
catch (Exception exc)
{
exc.printStackTrace();
String strError = exc.getMessage();
GfrRndPointPlacemarkCircleLloSpn._LOGGER_.severe(strError);
//--
strError = GfrUtlString.s_formatExceptionMessageForDialog(strError);
JOptionPane.showMessageDialog(null, strError, "Dev coding error", JOptionPane.ERROR_MESSAGE);
return;
}
// end images
// ---
super.update(obs, objEvt);
}
}