From: <fxp...@us...> - 2010-03-03 09:00:04
|
Revision: 5807 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=5807&view=rev Author: fxprunayre Date: 2010-03-03 08:59:58 +0000 (Wed, 03 Mar 2010) Log Message: ----------- Improve DataManager.existMetadata based on int as id is an int in the metadata table. Parse local id provided in MEF file before trying to load the record. Local id is an optional element. Its purpose is just to allow the reuse of the same local id when reimporting a metadata (see documentation). Thanks to Wolfgang for test. Modified Paths: -------------- trunk/src/org/fao/geonet/kernel/DataManager.java trunk/src/org/fao/geonet/kernel/mef/Importer.java trunk/src/org/fao/geonet/services/metadata/EditUtils.java trunk/src/org/fao/geonet/services/metadata/GetCategories.java trunk/src/org/fao/geonet/services/metadata/UpdateCategories.java Modified: trunk/src/org/fao/geonet/kernel/DataManager.java =================================================================== --- trunk/src/org/fao/geonet/kernel/DataManager.java 2010-03-02 15:31:09 UTC (rev 5806) +++ trunk/src/org/fao/geonet/kernel/DataManager.java 2010-03-03 08:59:58 UTC (rev 5807) @@ -1043,8 +1043,7 @@ //-------------------------------------------------------------------------- /** Returns true if the metadata exists in the database */ - - public boolean existsMetadata(Dbms dbms, String id) throws Exception + public boolean existsMetadata(Dbms dbms, int id) throws Exception { //FIXME : should use lucene Modified: trunk/src/org/fao/geonet/kernel/mef/Importer.java =================================================================== --- trunk/src/org/fao/geonet/kernel/mef/Importer.java 2010-03-02 15:31:09 UTC (rev 5806) +++ trunk/src/org/fao/geonet/kernel/mef/Importer.java 2010-03-03 08:59:58 UTC (rev 5807) @@ -396,16 +396,34 @@ } Log.debug(Geonet.MEF, "Adding metadata with uuid:" + uuid); - - if (localId != null && !dm.existsMetadata(dbms, localId)) { - Log.debug(Geonet.MEF, "Using given localId: " + localId); - int iLocalId = Integer.parseInt(localId); + + // Try to insert record with localId provided, if not use a new id. + boolean insertedWithLocalId = false; + if (localId != null && !localId.equals("")) { + try { + int iLocalId = Integer.parseInt(localId); + + // Use the same id to insert the metadata record. + // This is an optional element. If present, indicates the + // id used locally by the sourceId actor to store the metadata. Its + // purpose is just to allow the reuse of the same local id when + // reimporting a metadata. + if (!dm.existsMetadata(dbms, iLocalId)) { + Log.debug(Geonet.MEF, "Using given localId: " + localId); + + id.add(index, dm.insertMetadataExt(dbms, schema, md.get(index), + iLocalId, source, createDate, changeDate, uuid, context + .getUserSession().getUserIdAsInt(), groupId, + isTemplate)); + insertedWithLocalId = true; + } + } catch (NumberFormatException e) { + Log.debug(Geonet.MEF, "Invalid localId provided: " + localId + ". Adding record with a new id."); + } + } + + if (!insertedWithLocalId) { id.add(index, dm.insertMetadataExt(dbms, schema, md.get(index), - iLocalId, source, createDate, changeDate, uuid, context - .getUserSession().getUserIdAsInt(), groupId, - isTemplate)); // CHECKME - } else { - id.add(index, dm.insertMetadataExt(dbms, schema, md.get(index), context.getSerialFactory(), source, createDate, changeDate, uuid, context.getUserSession().getUserIdAsInt(), groupId)); } Modified: trunk/src/org/fao/geonet/services/metadata/EditUtils.java =================================================================== --- trunk/src/org/fao/geonet/services/metadata/EditUtils.java 2010-03-02 15:31:09 UTC (rev 5806) +++ trunk/src/org/fao/geonet/services/metadata/EditUtils.java 2010-03-03 08:59:58 UTC (rev 5807) @@ -79,8 +79,9 @@ //----------------------------------------------------------------------- //--- check access - - if (!dataMan.existsMetadata(dbms, id)) + int iLocalId = Integer.parseInt(id); + + if (!dataMan.existsMetadata(dbms, iLocalId)) throw new BadParameterEx("id", id); if (!accessMan.canEdit(context, id)) Modified: trunk/src/org/fao/geonet/services/metadata/GetCategories.java =================================================================== --- trunk/src/org/fao/geonet/services/metadata/GetCategories.java 2010-03-02 15:31:09 UTC (rev 5806) +++ trunk/src/org/fao/geonet/services/metadata/GetCategories.java 2010-03-03 08:59:58 UTC (rev 5807) @@ -73,8 +73,9 @@ //----------------------------------------------------------------------- //--- check access - - if (!dataMan.existsMetadata(dbms, id)) + int iLocalId = Integer.parseInt(id); + + if (!dataMan.existsMetadata(dbms, iLocalId)) throw new IllegalArgumentException("Metadata not found --> " + id); Element isOwner = new Element("owner"); Modified: trunk/src/org/fao/geonet/services/metadata/UpdateCategories.java =================================================================== --- trunk/src/org/fao/geonet/services/metadata/UpdateCategories.java 2010-03-02 15:31:09 UTC (rev 5806) +++ trunk/src/org/fao/geonet/services/metadata/UpdateCategories.java 2010-03-03 08:59:58 UTC (rev 5807) @@ -71,8 +71,9 @@ //----------------------------------------------------------------------- //--- check access - - if (!dataMan.existsMetadata(dbms, id)) + int iLocalId = Integer.parseInt(id); + + if (!dataMan.existsMetadata(dbms, iLocalId)) throw new IllegalArgumentException("Metadata not found --> " + id); //----------------------------------------------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |