# HG changeset patch # User Raimund Renkert # Date 1393515936 -3600 # Node ID 945d25675a322b19641a291c0976a84b6948f2d6 # Parent 03cb95071d21d337530ea3fb230ba500116c78c2# Parent 819528f6fabb4388897887a3c6a5e716118298c1 merged. diff -r 03cb95071d21 -r 945d25675a32 artifacts/doc/howto_commit_windows.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/doc/howto_commit_windows.txt Thu Feb 27 16:45:36 2014 +0100 @@ -0,0 +1,89 @@ +Diese Anleitung erklärt wie man Änderungen an der Codebasis von +D4E-River unter Windows durchführen kann. In dieser Anleitung +wird dazu TortoiseHg und Putty verwendet. + +Hintergrund: +D4E-River wird mit dem Versionskontrollsystem Mercurial +( http://de.wikipedia.org/wiki/Mercurial ) verwaltet und ist auf +der Plattform "Wald" ( http://wald.intevation.org/ ) gehostet. +TortoiseHg ist eine Windows Explorer Erweiterung um ein graphisches +Frontend für Mercurial zu bieten. + + +Schritte 1-3 sind einmalig auszuführen. Schritt 4 muss immer wenn +man eine Änderung durchführen möchte geschehen. + +Schritt 1: Registrieren eines Benutzerkontos auf wald.intevation.de + +* Browser öffnen auf Seite https://www.wald.intevation.org/account/register.php + Das zugehörige Wurzelzertifikat kann unter https://ssl.intevation.de + (Root CA 2010) beschafft werden. +* Accountdetails eintragen (Nur Felder mit * müssen beachtet werden) +* Registrieren drücken. +-> Ihnen wird eine E-Mail mit einem Link zur Bestätigung gesendet. +* Link aus der E-Mail öffnen. +* Unter: https://wald.intevation.org/projects/dive4elements/ einen Beitrittsgesuch + (Link dafür ist Rechts unten auf der Seite unter den Mitgliedern) + Knappen Kommentar einfügen: "Beitrittsgesuch Frau Mustermann" o.Ä. +-> Ein Admin in diesem Projekt muss Sie nun manuell freischalten. + +Schritt 2: SSH Schlüssel erstellen und in Wald hinterlegen + +(Dieser Teil geht davon aus das Putty bereits installiert ist) +* Puttygen starten +* "Generate a public/private key pair" Ausführen +* ggf. Einen Key Comment z.B. "Wald Schluessel" angeben. +* ggf. Eine passphrase angeben +* Save private key -> Schlüssel abspeichern z.B: c:\Benutzer\name\wald-schluessel.ppk +* Save public key -> Öffentlichen Schlüssel abspeichern z.B: c:\Benutzer\name\wald-schluessel-pub.txt +* Kopieren Sie den Inhalt des Bereichs "Public key for pasting into OpenSSH authorized_keys file:" +* Fügen Sie den öffentlichen Schlüssel in dem Eingabefeld unter: + http://wald.intevation.org/account/editsshkeys.php + ein. +* Speichern des Schlüssels durch drücken auf den Button "Aktualisierung". + +! Achtung: Es kann bis zu einer Stunde dauern bis der Schlüssel im System + synchronisiert ist. + + +Schritt 3: TortoiseHg (Software zur Versionskontrolle) installieren +* Unter: http://tortoisehg.bitbucket.org/ TortoiseHg herunterladen + Die passende Version hängt von der Architektur ihres Systems (32/64-Bit ab) +* TortoiseHg installieren. Die Standardoptionen sind ausreichend. +* Fügen Sie nun den Privaten Schlüssel den Sie in Schritt 2 generiert haben + in Pageant ein. + (Wenn Pageant noch nicht installiert ist kann auch der Pageant aus TortoiseHg + verwendet werden. z.B. Installiert in (C:\Programme\TortoiseHg\Pageant.exe) +* Navigieren Sie im Windows Explorer in ein Verzeichnis in welchem + das D4E-River Repository angelegt werden soll. +* Rechtsklick im Windows Explorer zeigt nun neue Kontext Optionen für TortoiseHg. + TortoiseHg -> clone +* Tragen Sie als Quelle ssh://@scm.wald.intevation.org/hg/dive4elements/river/ + ein. Als Ziel einen Ordnernamen für ihr Lokales Repository. +-> Bei der ersten Verbindung werden Sie darauf hingewiesen das der Host Key des Servers + noch unbekannt ist. Der RSA Fingerprint von Wald ist: + 24:d2:13:1f:fa:02:54:f1:79:4f:5d:a0:aa:d3:ed + +Tritt kein Fehler auf haben Sie nun einen Authentifizierten Klon des D4E-River +Repositories. + + +Schritt 4: Änderungen durchführen. +* Sicherstellen das Pageant gestartet ist und den Key enthält. +* Aktualisieren der lokalen Kopie im Ordner des Repositories + - Rechtsklick -> TortoiseHg -> Synchronize + - Auswählen "Nach dem Abfurfen" -> Update + - Eingehende Änderungen von der ausgewählten URL abrufen +* Änderungen an den Dateien durchführen. +* Rechtsklick auf die geänderte Datei -> Hg Commit... +* Eine Versionsmeldung im Fenster die knapp zusammenfasst was / warum + Sie etwas geändert haben. (Am liebsten in Englisch) + z.B.: "Corrected usage of the word 'fixation' in english translations" +* Änderungen zum Server übertragen + - Rechtsklick -> TortoiseHg -> Synchronize + - Ausgehende Änderungen an die ausgewählte URL übertragen + +Hinweis: Beim ersten "Commit" werden Sie gebeten sich zu Identifizieren. +Im darauffolgenden Einstellungs Fenster müssen Sie dann einen Benutzernamen +Angeben. Dieser sollte das Format vorname nachname haben. +z.B.: Andre Heinecke diff -r 03cb95071d21 -r 945d25675a32 artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java Thu Feb 27 16:43:24 2014 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java Thu Feb 27 16:45:36 2014 +0100 @@ -219,6 +219,16 @@ } setCurrentState(states.get(0)); + handleInitModel(data, context, callMeta); + + filterFacets = buildFilterFacets(data); + + extractOut(data); + } + + protected void handleInitModel(Document data, Object context, CallMeta callMeta) { + RiverContext flysContext = RiverUtils.getFlysContext(context); + String model = XMLUtils.xpathString( data, XPATH_MODEL_ARTIFACT, @@ -235,10 +245,6 @@ log.error(adbe, adbe); } } - - filterFacets = buildFilterFacets(data); - - extractOut(data); } protected void extractOut(Document data) { @@ -1607,7 +1613,7 @@ String out = entry.getKey(); List filters = entry.getValue(); - log.debug("There are " + filters.size() + " filters for: " +out); + log.debug("There are " + filters.size() + " filters for: " + out); for (Facet filter: filters) { log.debug(" filter: " + filter.getName()); diff -r 03cb95071d21 -r 945d25675a32 artifacts/src/main/java/org/dive4elements/river/artifacts/MapArtifact.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/MapArtifact.java Thu Feb 27 16:43:24 2014 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/MapArtifact.java Thu Feb 27 16:45:36 2014 +0100 @@ -52,6 +52,9 @@ List states = getStates(context); setCurrentState(states.get(0)); + + // Needed if cloning another artifact. + super.handleInitModel(data, context, callmeta); } diff -r 03cb95071d21 -r 945d25675a32 artifacts/src/main/java/org/dive4elements/river/artifacts/model/map/WMSDBLayerFacet.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/map/WMSDBLayerFacet.java Thu Feb 27 16:43:24 2014 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/map/WMSDBLayerFacet.java Thu Feb 27 16:45:36 2014 +0100 @@ -9,6 +9,7 @@ package org.dive4elements.river.artifacts.model.map; import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; +import org.dive4elements.artifactdatabase.state.Facet; public class WMSDBLayerFacet extends WMSLayerFacet { @@ -110,5 +111,27 @@ public boolean isQueryable() { return true; } + + /** Clone Facet-bound data. */ + protected void cloneData(WMSDBLayerFacet copy) { + super.cloneData(copy); + copy.setFilter(this.getFilter()); + copy.setData(this.getData()); + copy.setGeometryType(this.getGeometryType()); + copy.setConnection(this.getConnection()); + copy.setConnectionType(this.getConnectionType()); + copy.setLabelItem(this.getLabelItem()); + } + + /** Copy deeply. */ + @Override + public Facet deepCopy() { + WMSDBLayerFacet copy = new WMSDBLayerFacet(); + copy.set(this); + + cloneData(copy); + + return copy; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 03cb95071d21 -r 945d25675a32 artifacts/src/main/java/org/dive4elements/river/artifacts/model/map/WMSLayerFacet.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/map/WMSLayerFacet.java Thu Feb 27 16:43:24 2014 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/map/WMSLayerFacet.java Thu Feb 27 16:45:36 2014 +0100 @@ -173,18 +173,31 @@ } + /** Clone facet-bound data. */ + protected void cloneData(WMSLayerFacet copy) { + copy.type = type; + copy.stateId = stateId; + copy.hash = hash; + + if (layers != null) { + copy.layers = new ArrayList(layers); + } + else { + copy.layers = new ArrayList(); + } + + copy.originalExtent = originalExtent; + copy.url = url; + copy.extent = extent; + copy.srid = srid; + } + @Override public Facet deepCopy() { WMSLayerFacet copy = new WMSLayerFacet(); copy.set(this); - copy.type = type; - copy.layers = new ArrayList(layers); - copy.stateId = stateId; - copy.hash = hash; - copy.url = url; - copy.extent = extent; - copy.srid = srid; + cloneData(copy); return copy; } diff -r 03cb95071d21 -r 945d25675a32 artifacts/src/main/java/org/dive4elements/river/artifacts/model/map/WSPLGENLayerFacet.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/map/WSPLGENLayerFacet.java Thu Feb 27 16:43:24 2014 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/map/WSPLGENLayerFacet.java Thu Feb 27 16:45:36 2014 +0100 @@ -9,6 +9,7 @@ package org.dive4elements.river.artifacts.model.map; import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; +import org.dive4elements.artifactdatabase.state.Facet; public class WSPLGENLayerFacet extends WMSLayerFacet @@ -50,5 +51,17 @@ public boolean isQueryable() { return true; } + + + /** Copy deeply. */ + @Override + public Facet deepCopy() { + WSPLGENLayerFacet copy = new WSPLGENLayerFacet(); + copy.set(this); + + cloneData(copy); + + return copy; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 03cb95071d21 -r 945d25675a32 backend/doc/schema/oracle.sql --- a/backend/doc/schema/oracle.sql Thu Feb 27 16:43:24 2014 +0100 +++ b/backend/doc/schema/oracle.sql Thu Feb 27 16:45:36 2014 +0100 @@ -262,7 +262,7 @@ CREATE TABLE rivers ( id NUMBER(38,0) NOT NULL, - uuid CHAR(37 CHAR), + model_uuid CHAR(36 CHAR) UNIQUE, official_number NUMBER(38,0), km_up NUMBER(38,0) DEFAULT 0 NOT NULL, name VARCHAR2(255) NOT NULL UNIQUE, diff -r 03cb95071d21 -r 945d25675a32 backend/doc/schema/postgresql.sql --- a/backend/doc/schema/postgresql.sql Thu Feb 27 16:43:24 2014 +0100 +++ b/backend/doc/schema/postgresql.sql Thu Feb 27 16:45:36 2014 +0100 @@ -12,7 +12,7 @@ CREATE TABLE rivers ( id int PRIMARY KEY NOT NULL, - uuid CHAR(37), + model_uuid CHAR(36) UNIQUE, official_number int8, name VARCHAR(256) NOT NULL UNIQUE, km_up BOOLEAN NOT NULL DEFAULT true, diff -r 03cb95071d21 -r 945d25675a32 gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java Thu Feb 27 16:43:24 2014 +0100 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.java Thu Feb 27 16:45:36 2014 +0100 @@ -228,6 +228,8 @@ String wrongFormat(); + String toShouldNotBeNegative(); + String atLeastOneValue(); String missingInput(); diff -r 03cb95071d21 -r 945d25675a32 gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties Thu Feb 27 16:43:24 2014 +0100 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants.properties Thu Feb 27 16:45:36 2014 +0100 @@ -129,6 +129,7 @@ unitDiffInM = Diff [m]: unitLocation = km wrongFormat = Wrong format +toShouldNotBeNegative = Field 'to' has to contain a positive value. atLeastOneValue = You need to insert at least one value. missingInput = You need to enter a value. too_many_values = Only one value allowed diff -r 03cb95071d21 -r 945d25675a32 gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties Thu Feb 27 16:43:24 2014 +0100 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_de.properties Thu Feb 27 16:45:36 2014 +0100 @@ -129,6 +129,7 @@ unitDiffInM = Diff [m]: unitLocation = km wrongFormat = Falsches Format +toShouldNotBeNegative = Feld 'bis' muss einen positiven Wert enthalten. atLeastOneValue = Sie m\u00fcssen mindestens einen Wert eingeben. missingInput = Sie m\u00fcssen einen Wert eingeben. too_many_values = Nur ein Eingabewert erlaubt diff -r 03cb95071d21 -r 945d25675a32 gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_en.properties --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_en.properties Thu Feb 27 16:43:24 2014 +0100 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/FLYSConstants_en.properties Thu Feb 27 16:45:36 2014 +0100 @@ -130,6 +130,7 @@ unitDiffInM = Diff [m]: unitLocation = km wrongFormat = Wrong format +toShouldNotBeNegative = Field 'to' has to contain a positive value. atLeastOneValue = You need to insert at least one value. missingInput = You need to enter a value. too_many_values = Only one value allowed diff -r 03cb95071d21 -r 945d25675a32 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DistancePanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DistancePanel.java Thu Feb 27 16:43:24 2014 +0100 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DistancePanel.java Thu Feb 27 16:45:36 2014 +0100 @@ -423,6 +423,7 @@ } + /** Gets the double from default in data, null if none. */ protected double getDefaultValue(Data data) throws NumberFormatException { diff -r 03cb95071d21 -r 945d25675a32 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DoubleRangePanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DoubleRangePanel.java Thu Feb 27 16:43:24 2014 +0100 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/DoubleRangePanel.java Thu Feb 27 16:45:36 2014 +0100 @@ -54,6 +54,10 @@ public DoubleRangePanel() { } + public FloatItem getToItem() { + return toItem; + } + /** * Creates a new form with a single input field that displays an array of @@ -153,7 +157,6 @@ stepItem.setValue(f.format(steps)); } - public boolean validateForm() { try { return @@ -171,6 +174,9 @@ * there are values that doesn't represent a valid float, an error is * displayed. * + * Also if negativeToAllowed is false, an error is registered if + * the 'to' field contains a negative value. + * * @param item The FormItem. */ @SuppressWarnings("unchecked") diff -r 03cb95071d21 -r 945d25675a32 gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WaterlevelGroundPanel.java --- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WaterlevelGroundPanel.java Thu Feb 27 16:43:24 2014 +0100 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/WaterlevelGroundPanel.java Thu Feb 27 16:45:36 2014 +0100 @@ -8,7 +8,7 @@ package org.dive4elements.river.client.client.ui; -import java.util.List; +import com.smartgwt.client.widgets.form.validator.FloatRangeValidator; public class WaterlevelGroundPanel extends DistancePanel { @@ -21,6 +21,11 @@ public WaterlevelGroundPanel() { super("left"); + + FloatRangeValidator frv = new FloatRangeValidator(); + frv.setMin(0f); + frv.setMax(Float.MAX_VALUE); + distancePanel.getToItem().setValidators(frv); } @@ -125,16 +130,5 @@ // We don't need a helper panel here. But we have to override this // method to avoid the table creation in the parent class. } - - @Override - protected void validateTo(List errors) { - double to = distancePanel.getTo(); - - if (to < 0d) { - distancePanel.setTo(max); - errors.add(MSG.negative_values_not_allowed_for_to()); - } - super.validateTo(errors); - } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :