Package org.geoforge.guillc.dialog

Source Code of org.geoforge.guillc.dialog.GfrDlgNewSettingsTloSegWiseYesAbs

/*
*  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.guillc.dialog;

import gov.nasa.worldwind.geom.LatLon;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import javax.swing.JFrame;
import org.geoforge.guillc.event.GfrEvtPanelChange;
import org.geoforge.guillc.event.GfrEvtValidityChanged;
import org.geoforge.guillc.handler.IGfrHandlerDisplayableObjectsSet;
import org.geoforge.guillc.handler.IGfrHandlerListenerPanelDialog;
import org.geoforge.guillc.panel.GfrPnlGrpSngLbls;
import org.geoforge.guillc.panel.GfrPnlGrpTfdLbl;
import org.geoforge.guillc.panel.GfrPnlGrpSngTxfsFxdEditable;
import org.geoforge.lang.util.GfrResBundleLang;
import org.geoforge.lang.util.geography.GfrUtilDmsOperation;
import org.geoforge.lang.util.number.GfrDouble;

/**
*
* @author Amadeus.Sowerby
*
* email: Amadeus.Sowerby_AT_gmail.com ... please remove "_AT_" from the above
* string to get the right email address
*/
abstract public class GfrDlgNewSettingsTloSegWiseYesAbs extends GfrDlgNewSettingsTloNamAbsAbs
{
   // should be located elsewhere, ie. DB, wrapper

   final static public double DBL_MINIMUM_LENGTH_IN_METERS = 1d;

   final protected static int _INT_WIDTH_LEFT = 135;

   final protected static int _INT_WIDTH_MIDDLE = 240;

   final protected static int _INT_WIDTH_RIGHT = 10;

   final static protected int _INT_WIDTH_UNIT = 120;

   abstract protected double _getMaxLengthAllowed();
   // quick fix - todo : split in two classes
   private boolean _blnFilledValues_ = false;

   protected GfrPnlGrpSngLbls _pnlLabelsLatLon;

   protected GfrPnlGrpSngTxfsFxdEditable _pnlCoordinatesPointBegin;

   protected GfrPnlGrpSngTxfsFxdEditable _pnlCoordinatesPointEnd;

   protected GfrPnlGrpTfdLbl _pnlLengthComputedFromCoordinates;

   public GfrDlgNewSettingsTloSegWiseYesAbs(
           JFrame frmOwner,
           IGfrHandlerDisplayableObjectsSet enuValueTlo,
           String[] strsExistingItems,
           LatLon llnBeg,
           LatLon llnEnd)
   {
      this(
              frmOwner,
              enuValueTlo,
              strsExistingItems);

      this._blnFilledValues_ = true;

      DecimalFormatSymbols decimalSymbol = new DecimalFormatSymbols(Locale.getDefault());
      decimalSymbol.setDecimalSeparator('.');

      final DecimalFormat df = new DecimalFormat("#.########");

      df.setDecimalFormatSymbols(decimalSymbol);
      String strLatBeg = df.format(llnBeg.getLatitude().degrees);
      String strLonBeg = df.format(llnBeg.getLongitude().degrees);
      String strLatEnd = df.format(llnEnd.getLatitude().degrees);
      String strLonEnd = df.format(llnEnd.getLongitude().degrees);

      this._pnlCoordinatesPointBegin.setContentLeft(strLatBeg);
      this._pnlCoordinatesPointBegin.setContentRight(strLonBeg);
      this._pnlCoordinatesPointEnd.setContentLeft(strLatEnd);
      this._pnlCoordinatesPointEnd.setContentRight(strLonEnd);

   }

   public GfrDlgNewSettingsTloSegWiseYesAbs(
           JFrame frmOwner,
           IGfrHandlerDisplayableObjectsSet enuValueTlo,
           String[] strsExistingItems)
   {
      super(
              frmOwner,
              enuValueTlo,
              strsExistingItems);

      this._pnlLabelsLatLon = new GfrPnlGrpSngLbls("", "Latitude", "Longitude");
      this._pnlCoordinatesPointBegin = new GfrPnlGrpSngTxfsFxdEditable("Starting point:");
      this._pnlCoordinatesPointEnd = new GfrPnlGrpSngTxfsFxdEditable("Ending point:");

      this._pnlLengthComputedFromCoordinates = new GfrPnlGrpTfdLbl(
              GfrResBundleLang.s_getInstance().getValue("word.length"),
              "",
              "m",
              GfrDlgNewSettingsTloSegWiseYesAbs._INT_WIDTH_UNIT);

      super.addToListResizable(this._pnlLabelsLatLon);
      super.addToListResizable(this._pnlCoordinatesPointBegin);
      super.addToListResizable(this._pnlCoordinatesPointEnd);
      super.addToListResizable(this._pnlLengthComputedFromCoordinates);


      this._pnlLabelsLatLon.addPanelListener((IGfrHandlerListenerPanelDialog) this);
      this._pnlCoordinatesPointBegin.addPanelListener((IGfrHandlerListenerPanelDialog) this);
      this._pnlCoordinatesPointEnd.addPanelListener((IGfrHandlerListenerPanelDialog) this);
   }

   @Override
   public boolean init()
   {
      if (!super.init())
         return false;

      if (!this._pnlLabelsLatLon.init())
         return false;

      if (!this._pnlCoordinatesPointBegin.init())
         return false;

      if (!this._pnlCoordinatesPointEnd.init())
         return false;

      if (!this._pnlLengthComputedFromCoordinates.init())
         return false;

      this._pnlCoordinatesPointBegin.setEditable(!this._blnFilledValues_);
      this._pnlCoordinatesPointEnd.setEditable(!this._blnFilledValues_);

      this._pnlLabelsLatLon.setMandatoryIcon(false);

      this._pnlLengthComputedFromCoordinates.setMandatoryIcon(false);
      this._pnlLengthComputedFromCoordinates.setEditable(false);


      return true;
   }

   @Override
   public void destroy()
   {
      super.destroy();

      if (this._pnlLabelsLatLon != null)
      {
         this._pnlLabelsLatLon.destroy();
         this._pnlLabelsLatLon = null;
      }

      if (this._pnlCoordinatesPointBegin != null)
      {
         this._pnlCoordinatesPointBegin.destroy();
         this._pnlCoordinatesPointBegin = null;
      }

      if (this._pnlCoordinatesPointEnd != null)
      {
         this._pnlCoordinatesPointEnd.destroy();
         this._pnlCoordinatesPointEnd = null;
      }



      if (this._pnlLengthComputedFromCoordinates != null)
      {
         this._pnlLengthComputedFromCoordinates.destroy();
         this._pnlLengthComputedFromCoordinates = null;
      }
   }

   private boolean _coordinatesPointBeginHasNoError_()
   {
      String strLatitude = this._pnlCoordinatesPointBegin.getContentLeft();
      String strLongitude = this._pnlCoordinatesPointBegin.getContentRight();

      if ((strLatitude == null || strLatitude.length() < 1)
              && (strLongitude == null || strLongitude.length() < 1))
         return true;

      return _coordinatesPointBeginEnablesOk_();
   }

   private boolean _coordinatesPointEndHasNoError_()
   {
      String strLatitude = this._pnlCoordinatesPointEnd.getContentLeft();
      String strLongitude = this._pnlCoordinatesPointEnd.getContentRight();

      if ((strLatitude == null || strLatitude.length() < 1)
              && (strLongitude == null || strLongitude.length() < 1))
         return true;

      return _coordinatesPointEndEnablesOk_();
   }

   private boolean _coordinatesPointBeginEnablesOk_()
   {

      String strLatitude = this._pnlCoordinatesPointBegin.getContentLeft();
      String strLongitude = this._pnlCoordinatesPointBegin.getContentRight();

      if (strLatitude == null || strLatitude.length() < 1)
         return false;

      if (strLongitude == null || strLongitude.length() < 1)
         return false;

      Double dblLatitude = GfrDouble.valueOf(strLatitude);
      Double dblLongitude = GfrDouble.valueOf(strLongitude);


      if (dblLatitude == null)
      {
         validityChanged(new GfrEvtValidityChanged(false, "Enter valid starting point latitude."));
         return false;
      }

      if (dblLatitude > 90d || dblLatitude < -90d)
      {
         validityChanged(new GfrEvtValidityChanged(false, "Starting point latitude should be in between 90º and -90º."));
         return false;
      }

      if (dblLongitude == null)
      {
         validityChanged(new GfrEvtValidityChanged(false, "Enter valid starting point longitude."));
         return false;
      }

      if (dblLongitude > 180d || dblLongitude < -180d)
      {
         validityChanged(new GfrEvtValidityChanged(false, "Starting point longitude should be in between 180º and -180º."));
         return false;
      }


      return true;
   }

   private boolean _coordinatesPointEndEnablesOk_()
   {

      String strLatitude = this._pnlCoordinatesPointEnd.getContentLeft();
      String strLongitude = this._pnlCoordinatesPointEnd.getContentRight();

      if (strLatitude == null || strLatitude.length() < 1)
         return false;

      if (strLongitude == null || strLongitude.length() < 1)
         return false;

      Double dblLatitude = GfrDouble.valueOf(strLatitude);
      Double dblLongitude = GfrDouble.valueOf(strLongitude);


      if (dblLatitude == null)
      {
         validityChanged(new GfrEvtValidityChanged(false, "Enter valid ending point latitude."));
         return false;
      }

      if (dblLatitude > 90d || dblLatitude < -90d)
      {
         validityChanged(new GfrEvtValidityChanged(false, "Ending point latitude should be in between 90º and -90º"));
         return false;
      }

      if (dblLongitude == null)
      {
         validityChanged(new GfrEvtValidityChanged(false, "Enter valid ending point longitude."));
         return false;
      }

      if (dblLongitude > 180d || dblLongitude < -180d)
      {
         validityChanged(new GfrEvtValidityChanged(false, "Ending point longitude should be in between 180º and -180º"));
         return false;
      }


      return true;
   }

   @Override
   public void somethingHasHappened(GfrEvtPanelChange e)
   {
      Object obj = e.getSource();

      //-- !!! update length, but no return, coz call to super must be performed
      if (obj.equals(this._pnlCoordinatesPointBegin))
      {
         _updateLengthValue_();
      }

      //-- !!! update length, but no return, coz call to super must be performed
      if (obj.equals(this._pnlCoordinatesPointEnd))
      {
         _updateLengthValue_();
      }


      super.somethingHasHappened(e);
   }

   private void _updateLengthValue_()
   {
      String str = null;

      if (!_coordinatesPointEndEnablesOk_() || !_coordinatesPointBeginEnablesOk_())
      {
         str = "";
      }
      else
      {
         double dbl = GfrUtilDmsOperation.s_getDistanceFromDeg(
                 Double.valueOf(this._pnlCoordinatesPointBegin.getContentLeft()),
                 Double.valueOf(this._pnlCoordinatesPointBegin.getContentRight()),
                 Double.valueOf(this._pnlCoordinatesPointEnd.getContentLeft()),
                 Double.valueOf(this._pnlCoordinatesPointEnd.getContentRight()));

         dbl = GfrDouble.truncateTwoDecimal(dbl);

         str = String.valueOf(dbl);
      }


      this._pnlLengthComputedFromCoordinates.setValue(str);
   }

   @Override
   protected void _updateModifiedFieldStatus(GfrEvtPanelChange e)
   {
      Object objSource = e.getSource();

      if (objSource.equals(_pnlCoordinatesPointEnd))
      {
         boolean bln = false;
         bln = _coordinatesPointEndEnablesOk_();
         this._pnlCoordinatesPointEnd.setValueIsOk(bln);
      }

      if (objSource.equals(_pnlCoordinatesPointBegin))
      {
         boolean bln = false;
         bln = _coordinatesPointBeginEnablesOk_();
         this._pnlCoordinatesPointBegin.setValueIsOk(bln);
      }


      super._updateModifiedFieldStatus(e);
   }

   private boolean _computedLengthHasNoError_()
   {
      if (!_coordinatesPointEndEnablesOk_() || !_coordinatesPointBeginEnablesOk_())
      {
         return true;//coordinates are not Ok => has no mean to try to compute a length
      }


      return _computedLengthEnablesOk_();

   }

   private boolean _computedLengthEnablesOk_()
   {


      if (!_coordinatesPointEndEnablesOk_() || !_coordinatesPointBeginEnablesOk_())
      {
         return false;
      }

      double dblVakue = GfrUtilDmsOperation.s_getDistanceFromDeg(
              Double.valueOf(this._pnlCoordinatesPointBegin.getContentLeft()),
              Double.valueOf(this._pnlCoordinatesPointBegin.getContentRight()),
              Double.valueOf(this._pnlCoordinatesPointEnd.getContentLeft()),
              Double.valueOf(this._pnlCoordinatesPointEnd.getContentRight()));


      if (dblVakue - GfrDouble.DBL_EPSILON_THREE_DIGITS > this._getMaxLengthAllowed())
      {
         validityChanged(new GfrEvtValidityChanged(false, "Length is bigger than " + this._getMaxLengthAllowed() + " m. Please modify coordinates."));
         return false;
      }

      if (dblVakue + GfrDouble.DBL_EPSILON_THREE_DIGITS < GfrDlgNewSettingsTloSegWiseYesAbs.DBL_MINIMUM_LENGTH_IN_METERS)
      {
         validityChanged(new GfrEvtValidityChanged(false, "Length is lower to " + GfrDlgNewSettingsTloSegWiseYesAbs.DBL_MINIMUM_LENGTH_IN_METERS + " m. Please modify coordinates."));
         return false;
      }


      return true;
   }

   @Override
   protected boolean _okEnableable()
   {
      return super._okEnableable()
              && _coordinatesPointEndEnablesOk_()
              && _coordinatesPointBeginEnablesOk_()
              && _computedLengthEnablesOk_();
   }

   @Override
   protected boolean _noErrorToDisplay()
   {
      return super._noErrorToDisplay()
              && _coordinatesPointEndHasNoError_()
              && _coordinatesPointBeginHasNoError_()
              && _computedLengthHasNoError_();

   }
}
TOP

Related Classes of org.geoforge.guillc.dialog.GfrDlgNewSettingsTloSegWiseYesAbs

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.