Package org.geoforge.guillcogc.wwd.rlrs

Source Code of org.geoforge.guillcogc.wwd.rlrs.GfrSetRlrTopMainOgcWmssAbs

/*
*  Copyright (C) 2011-2014 GeoForge Project
*
*  This program is free software; you can redistribute it and/or
*  modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
*  You should have received a copy of the GNU Lesser General Public License
*  along with this program; if not, write to the Free Software
*  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
package org.geoforge.guillcogc.wwd.rlrs;

import gov.nasa.worldwind.avlist.AVList;
import gov.nasa.worldwind.awt.WorldWindowGLCanvas;
import gov.nasa.worldwind.layers.Layer;
import gov.nasa.worldwind.layers.LayerList;
import java.util.EventObject;
import java.util.Observable;
import java.util.Observer;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import org.geoforge.guillc.optionpane.GfrOptionPaneAbs;
import org.geoforge.guillc.wwd.rlrs.GfrSetRlrTopMainAbs;
import org.geoforge.guillcogc.util.GfrResBundleGuiLlcOgc;
import org.geoforge.java.enumeration.GfrEnuSystemPropertiesKeys;
import org.geoforge.lang.util.GfrResBundleLang;
import org.geoforge.java.util.logging.filehandler.FileHandlerLogger;
import org.geoforge.mdldat.event.GfrEvtMdlIdDatAddedTlo;
import org.geoforge.mdldat.event.GfrEvtMdlIdDatRemovedAllMlo;
import org.geoforge.mdldat.event.GfrEvtMdlIdDatRemovedMlo;
import org.geoforge.mdldatogc.GfrMdlDatIdObjTloOgcWms;
import org.geoforge.mdldatogc.GfrMdlDatSetTlosOgcWms;
import org.geoforge.mdldatogc.event.GfrEvtMdlIdDatAddedLloVarWmsLyrLeaf;
import org.geoforge.mdldatogc.worldwind.capabilities.GfrCapWms;
import org.geoforge.mdldatogc.worldwind.thread.GfrPgsThrOgcWmsLoad;
import org.geoforge.worldwindogc.avlist.AVListImplChildWms;
import org.geoforge.worldwindogc.capabilities.GfrWMSCapabilities;
import org.geoforge.worldwindogc.util.eventobject.GfrEventObjectLoadedCapWmsOgc;
import org.geoforge.lang.handler.IGfrHandlerEventListenerThreadJobProgress;
import org.geoforge.mdldat.event.GfrEvtMdlIdDatClonedTlo;
import org.geoforge.mdldsp.event.render.wwd.EnuEvtDspRndWwdEarthImg;
import org.geoforge.mdldsp.event.render.wwd.GfrEvtMdlIdDspRndWwdEarthShpDimOneImg;
import org.geoforge.mdldspogc.render.wwd.GfrMdlDspRndWwdEarthImgLyrLeaf;
import org.geoforge.worldwindogc.layer.GfrLyrWMSTiledImageLayer;
import org.geoforge.wrpbasprsdsp.render.wwd.GfrWrpBasPrsDspPrjRndWwdEarthImg;
import org.geoforge.wrpbasprssynogc.GfrWrpBasSynObjNameTloWms;
import org.geoforge.wrpbasprssynogc.GfrWrpBasTopSynOgcWmss;


/**
*
* @author bantchao
*/
abstract public class GfrSetRlrTopMainOgcWmssAbs extends GfrSetRlrTopMainAbs implements
        IGfrHandlerEventListenerThreadJobProgress
{
   final static protected String[] _STRS_OPTION_WARNING = new String[]
   {
      "Ignore",
      "Always ignore",
      GfrResBundleLang.s_getInstance().getValue("verb.remove"),
      "Always remove"
   };
  
   static protected int _INT_CHOICE_WARNING = 0;
  
   // ----
    // begin: instantiate logger for this class
    final private static Logger _LOGGER_ = Logger.getLogger(GfrSetRlrTopMainOgcWmssAbs.class.getName());

    static
    {
        GfrSetRlrTopMainOgcWmssAbs._LOGGER_.addHandler(FileHandlerLogger.s_getInstance());
    }

    // end: instantiate logger for this class
    // ----
   
   
    abstract protected Object _addObjectLloLayer(String strId, String strIdParent,
           GfrWMSCapabilities caps, AVList params) throws Exception;
   
   
  
    private String _strWhat_ = null;
   
   protected GfrSetRlrTopMainOgcWmssAbs(WorldWindowGLCanvas cnv, String strWhat)
   {
      super(cnv);
     
      this._strWhat_ = strWhat;
     
      GfrMdlDatSetTlosOgcWms.getInstance().addObserver((Observer) this);
      GfrMdlDatIdObjTloOgcWms.getInstance().addObserver((Observer) this);
     
      GfrMdlDspRndWwdEarthImgLyrLeaf.getInstance().addObserver((Observer) this);
   }
  
  
  
   @Override
   public void update(Observable obs, Object objEvt)
   {
      if (this._blnDestroyed_)
         return;
     
      if (objEvt instanceof GfrEvtMdlIdDspRndWwdEarthShpDimOneImg)
      {
         GfrEvtMdlIdDspRndWwdEarthShpDimOneImg evtImg = (GfrEvtMdlIdDspRndWwdEarthShpDimOneImg) objEvt;
         String strIdLayerLeaf = evtImg.getId();
         Object objWhat = evtImg.getWhat();
        
         if (objWhat == EnuEvtDspRndWwdEarthImg.TRANSPARENCY)
          {
             Float flo = (Float) evtImg.getValue();
             float fltAlpha = flo.floatValue();
            
             _updateTransparency_(strIdLayerLeaf, fltAlpha);

             return;
          }
        
         else
         {
            String str = "Dev coding error, uncaught instanceof objWhat:" + objWhat;
            GfrSetRlrTopMainOgcWmssAbs._LOGGER_.severe(str);
            GfrOptionPaneAbs.s_showDialogError(null, str);
            return;
         }
      }
     
      if (objEvt instanceof GfrEvtMdlIdDatAddedTlo ||
          objEvt instanceof GfrEvtMdlIdDatClonedTlo // rather dev coding error !!!
              )
         return;
     
      try
      {
         if (objEvt instanceof GfrEvtMdlIdDatAddedLloVarWmsLyrLeaf)
         {
            GfrEvtMdlIdDatAddedLloVarWmsLyrLeaf evt = (GfrEvtMdlIdDatAddedLloVarWmsLyrLeaf) objEvt;
        
            String strId = evt.getId();
            String strIdParent = evt.getIdParent();
            GfrWMSCapabilities caps = GfrCapWms.getInstance().get(strIdParent);

            AVList params = new AVListImplChildWms(
              evt.getValueLayerNames(),
              evt.getValueDisplayName(),
              evt.getValueLayerAbstract(),
              evt.getValueStyleNames()) {};
        
            Object objLayerLeaf = this._addObjectLloLayer(strId, strIdParent, caps, params);
        
            if (objLayerLeaf == null)
            {
               GfrSetRlrTopMainOgcWmssAbs._LOGGER_.info("objLayerLeaf == null, strId=" + strId);
               return;
            }
           
            float flt = GfrWrpBasPrsDspPrjRndWwdEarthImg.getInstance().getTransparency(strId);
            Layer lyrLeaf = (Layer) objLayerLeaf;

            lyrLeaf.setOpacity((double) flt);
        
            return;
         }
        
        
      }
     
      catch(Exception exc)
      {
         exc.printStackTrace();
         String str = exc.getMessage();
         GfrSetRlrTopMainOgcWmssAbs._LOGGER_.severe(str);
         GfrOptionPaneAbs.s_showDialogError(null, str);
         return;
      }
     
      // quick fix
      if (obs instanceof GfrMdlDatIdObjTloOgcWms)
      {
         if  (objEvt instanceof GfrEvtMdlIdDatRemovedAllMlo ||
              objEvt instanceof GfrEvtMdlIdDatRemovedMlo
                 )
         {
            javax.swing.SwingUtilities.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                   if (_cnv != null)
                      _cnv.redraw();
                }
            });
         }
           
         return;
      }
     
      super.update(obs, objEvt);
   }
  
   private void _updateTransparency_(String strIdLayerLeaf, float fltAlpha)
   {     
      LayerList llt = super._cnv.getModel().getLayers();
     
      for (Layer lyrCur: llt)
      {
         if (! (lyrCur instanceof GfrLyrWMSTiledImageLayer))
            continue;
        
         GfrLyrWMSTiledImageLayer lyrLeafCur = (GfrLyrWMSTiledImageLayer) lyrCur;
        
         String strIdCur = lyrLeafCur.getIdObjectGeoforgeWwdEarth();
        
         if (strIdCur.compareTo(strIdLayerLeaf) != 0)
            continue;
        
         double dblOpacityPrev = lyrCur.getOpacity();
        
         if (dblOpacityPrev == (double) fltAlpha)
            return;
        
         lyrCur.setOpacity((double) fltAlpha);
        
         if (! lyrCur.isEnabled())
            return;
        
         javax.swing.SwingUtilities.invokeLater(new Runnable()
         {
            @Override
            public void run()
            {
               if (_cnv != null)
                  _cnv.redraw();
            }
         });
        
         return;
      }
   }
  
   @Override
   public void handleEventThreadJobDone(EventObject e)
   {
      if (this._blnDestroyed_)
         return;
     
     
      GfrEventObjectLoadedCapWmsOgc evt = (GfrEventObjectLoadedCapWmsOgc) e;
      final String strIdWms = evt.getIdWms();
     
      String strError = evt.getError();
     
      if (strError != null)
      {
       
         if (_INT_CHOICE_WARNING == 3) //always remove
         {
            javax.swing.SwingUtilities.invokeLater(new Runnable()
            {
                  @Override
                  public void run()
                  {

                     _invokeLaterDelete_(strIdWms);
                  }
            });
           
            return;
         }
        
         if (_INT_CHOICE_WARNING == 1) // always ignore
         {
            return;
         }
        
        
         // show error message, show to destroy, ans dont show error message again.
        
         String strWarning = "Sorry, server seems to be down";
           
            strWarning += "\n\n";
            strWarning += GfrResBundleLang.s_getInstance().getValue("word.details") + "\n";
           
            int intLastIndexComma = strError.lastIndexOf("http");
           
            if (intLastIndexComma != -1)
            {
               strWarning += "   " + strError.substring(0, intLastIndexComma-1);
              
               int intVal = intLastIndexComma + "http".length() -1;
              
               if (intVal != strError.length()-1)
               {
                  strWarning += "\n";
                  strWarning += "   " + strError.substring(intLastIndexComma);
               }
              
               else
                  strWarning += "http"; // done in a hurry!!!!
            }
           
            else
               strWarning += "   " + strError;
         
           
            String strTitle = System.getProperty(GfrEnuSystemPropertiesKeys.NAME_LONG_APPLI.getLabel());
           
            strTitle += " - " + GfrResBundleLang.s_getInstance().getValue("word.warning") + " " +
                    GfrResBundleGuiLlcOgc.s_getInstance().getValue("sentence.ogcServices") +
                    " " + this._strWhat_;
           
            _INT_CHOICE_WARNING = JOptionPane.showOptionDialog(
                    null,
                    strWarning,
                    strTitle,
                    JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,
                    null,
                    _STRS_OPTION_WARNING,
                    _STRS_OPTION_WARNING[0]);
           
            //GfrOptionPaneAbs.s_showDialogWarning(null, strWarning);
           
            if (_INT_CHOICE_WARNING==0 || _INT_CHOICE_WARNING==1)
               return;
           
            // cas: 2, 3
            javax.swing.SwingUtilities.invokeLater(new Runnable()
            {
                  @Override
                  public void run()
                  {

                     _invokeLaterDelete_(strIdWms);
                  }
            });
           
            return;
      } // end error
     
     
     
      GfrWMSCapabilities cap = GfrCapWms.getInstance().get(strIdWms);
     
      try
      {
         _loadChildrenLayer_(strIdWms, cap);
        // TODO: terrain
      }
     
      catch(Exception exc)
      {
         if (this._blnDestroyed_)
            return;
        
        
         exc.printStackTrace();
         String str = exc.getMessage();
         GfrSetRlrTopMainOgcWmssAbs._LOGGER_.severe(str);
         GfrOptionPaneAbs.s_showDialogError(null, str);
         return;
      }
   }
  

  
   @Override
   public void addAllObjects() throws Exception
   {    
      String[] strsUniqueId = GfrWrpBasTopSynOgcWmss.getInstance().getIdsTlo();

      if (strsUniqueId == null || strsUniqueId.length < 1)
         return;
     
      for (int i=0; i<strsUniqueId.length; i++)
      {
         _loadObject_(strsUniqueId[i]);
      }
   }
  
  
   private boolean _removeAllObjectsLayer_() throws Exception
   {
      boolean blnGotObject = false;
      LayerList llt = super._cnv.getModel().getLayers();
     
      for (Layer lyrCur: llt)
      {
         if (! (lyrCur instanceof GfrLyrWMSTiledImageLayer))
            continue;
        
         llt.remove(lyrCur);
         lyrCur.dispose();
         blnGotObject = true;
      }
     
      return blnGotObject;
   }
  
   @Override
   public void removeAllObjects() throws Exception
   {
      boolean blnShouldRedraw = false;
     
      // ----
      blnShouldRedraw |= _removeAllObjectsLayer_();
      // TODO: terrain
    
      // ----
      if (! blnShouldRedraw)
         return;
     
      javax.swing.SwingUtilities.invokeLater(new Runnable()
      {
          @Override
          public void run()
          {
             if (_cnv != null)
                _cnv.redraw();
          }
      });
   }

   @Override
   public Object addObjectVariable(String strId) throws Exception
   {   
      String str = "DEV CODING ERROR";
      GfrSetRlrTopMainOgcWmssAbs._LOGGER_.severe(str);
      throw new Exception(str);
   }

   private boolean _blnDestroyed_ = false;

   @Override
    public void destroy()
    {
       this._blnDestroyed_ = true;
      
       GfrMdlDatSetTlosOgcWms.getInstance().deleteObserver((Observer) this);
       GfrMdlDatIdObjTloOgcWms.getInstance().deleteObserver((Observer) this);
       GfrMdlDspRndWwdEarthImgLyrLeaf.getInstance().deleteObserver((Observer) this);
       super.destroy();
    }
  

   /*
    * pending: terrains
    */
   @Override
    public boolean removeObjectVariable(String strId) throws Exception
    {
       boolean blnGotIt = false;
       LayerList llt = super._cnv.getModel().getLayers();
       
        for (Layer lyrCur: llt)
        {
            if (! (lyrCur instanceof GfrLyrWMSTiledImageLayer))
               continue;
           
            GfrLyrWMSTiledImageLayer rlrCur = (GfrLyrWMSTiledImageLayer) lyrCur;
            String strIdCurParent = rlrCur.getIdParent();

            if (strIdCurParent.compareTo(strId) != 0)
                continue;
  
            llt.remove(lyrCur);
            rlrCur.dispose();
            blnGotIt = true;
        }
      
        return blnGotIt;
    }
  
  
   private void _loadObject_(String strId) throws Exception
   {
      if (this._blnDestroyed_)
         return;
     
      new GfrPgsThrOgcWmsLoad(strId, (IGfrHandlerEventListenerThreadJobProgress) this);
   }
  
   private void _loadChildLayer_(
           String strId,
           String strIdParent,
           GfrWMSCapabilities caps) throws Exception
   {
      String strValueNameLayer = GfrWrpBasSynObjNameTloWms.getInstance().getValueNameLayerLeaf(strId);
      String strValueTitleLayer = GfrWrpBasSynObjNameTloWms.getInstance().getValueTitleLayerLeaf(strId);
      String strValueAbstractLayer = GfrWrpBasSynObjNameTloWms.getInstance().getValueAbstractLayerLeaf(strId);
     
     
    
      String strValueStylesLayer = GfrWrpBasSynObjNameTloWms.getInstance().getValueStylesLayerLeaf(strId);
     
      AVList lstParamsChid = new AVListImplChildWms(
           strValueNameLayer,
           strValueTitleLayer,
           strValueAbstractLayer,
           strValueStylesLayer) {};
     
      Object objLayerLeaf =_addObjectLloLayer(strId, strIdParent, caps, lstParamsChid);
     
      if (objLayerLeaf == null)
      {
         GfrSetRlrTopMainOgcWmssAbs._LOGGER_.info("objLayerLeaf == null, strId=" + strId);
         return;
      }

      float flt = GfrWrpBasPrsDspPrjRndWwdEarthImg.getInstance().getTransparency(strId);
      Layer lyrLeaf = (Layer) objLayerLeaf;
     
      lyrLeaf.setOpacity((double) flt);
   }

   private void _loadChildrenLayer_(String strId, GfrWMSCapabilities cap) throws Exception
   {
      String[] strsIdChild = GfrWrpBasSynObjNameTloWms.getInstance().getAllIdsLayerLeafFromTop(strId);
     
      if (strsIdChild==null || strsIdChild.length<1)
         return;
     
      for (int i=0; i<strsIdChild.length; i++)
      {
         _loadChildLayer_(strsIdChild[i], strId, cap);
      }
   }
  
   private void _invokeLaterDelete_(String strIdWms)
   {
      try
      {
         GfrMdlDatSetTlosOgcWms.getInstance().deleteObjectWithId(strIdWms);
      }
     
      catch(Exception exc)
      {
         exc.printStackTrace();
      }
     
      destroy();
   }
}
TOP

Related Classes of org.geoforge.guillcogc.wwd.rlrs.GfrSetRlrTopMainOgcWmssAbs

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.