This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit d590089664bd94566a391b2a0d17314d0297e98a Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Aug 17 09:11:37 2015 +0200 Debut d'implantation du service de référentiel (topia) --- .../model/referential/ReferentialFormModel.java | 7 +- .../model/referential/ReferentialFormModels.java | 10 ++ .../services/service/ReferentialServiceTopia.java | 161 ++++++++++++++++++++- 3 files changed, 168 insertions(+), 10 deletions(-) diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/model/referential/ReferentialFormModel.java b/observe-services-model/src/main/java/fr/ird/observe/services/model/referential/ReferentialFormModel.java index 7c9b78d..229b027 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/model/referential/ReferentialFormModel.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/model/referential/ReferentialFormModel.java @@ -6,12 +6,12 @@ public class ReferentialFormModel<R extends ReferentialModel> extends AbstractRe private static final long serialVersionUID = 1L; - private final Class<R> type; + protected final Class<R> type; public ReferentialFormModel(Class<R> type) { this.type = type; } - + public ReferentialFormModel() { this(null); } @@ -27,4 +27,7 @@ public class ReferentialFormModel<R extends ReferentialModel> extends AbstractRe return (R) super.getForm(); } + public Class<R> getType() { + return type; + } } diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/model/referential/ReferentialFormModels.java b/observe-services-model/src/main/java/fr/ird/observe/services/model/referential/ReferentialFormModels.java new file mode 100644 index 0000000..7b7e339 --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/model/referential/ReferentialFormModels.java @@ -0,0 +1,10 @@ +package fr.ird.observe.services.model.referential; + +public class ReferentialFormModels extends AbstractReferentialFormModels { + + public static <BeanType extends ReferentialFormModel, R extends ReferentialModel> BeanType newReferentialFormModel(Class<R> source) { + BeanType result = (BeanType) new ReferentialFormModel<>(source); + return result; + } + +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java index 28ba8f5..ab4d12c 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/ReferentialServiceTopia.java @@ -1,10 +1,48 @@ package fr.ird.observe.services.service; -import fr.ird.observe.services.ObserveServiceContext; +import com.google.common.collect.ImmutableMap; +import fr.ird.observe.entities.referentiel.Country; +import fr.ird.observe.entities.referentiel.FpaZone; +import fr.ird.observe.entities.referentiel.Gear; +import fr.ird.observe.entities.referentiel.GearCaracteristic; +import fr.ird.observe.entities.referentiel.GearCaracteristicType; +import fr.ird.observe.entities.referentiel.Harbour; +import fr.ird.observe.entities.referentiel.LengthWeightParameter; +import fr.ird.observe.entities.referentiel.Ocean; +import fr.ird.observe.entities.referentiel.Organism; +import fr.ird.observe.entities.referentiel.Person; +import fr.ird.observe.entities.referentiel.Program; +import fr.ird.observe.entities.referentiel.Sex; +import fr.ird.observe.entities.referentiel.Species; +import fr.ird.observe.entities.referentiel.SpeciesGroup; +import fr.ird.observe.entities.referentiel.SpeciesList; +import fr.ird.observe.entities.referentiel.Vessel; +import fr.ird.observe.entities.referentiel.VesselSizeCategory; +import fr.ird.observe.entities.referentiel.VesselType; import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.model.referential.CountryModel; +import fr.ird.observe.services.model.referential.FpaZoneModel; +import fr.ird.observe.services.model.referential.GearCaracteristicModel; +import fr.ird.observe.services.model.referential.GearCaracteristicTypeModel; +import fr.ird.observe.services.model.referential.GearModel; +import fr.ird.observe.services.model.referential.HarbourModel; +import fr.ird.observe.services.model.referential.LengthWeightParameterModel; +import fr.ird.observe.services.model.referential.OceanModel; +import fr.ird.observe.services.model.referential.OrganismModel; +import fr.ird.observe.services.model.referential.PersonModel; +import fr.ird.observe.services.model.referential.ProgramModel; import fr.ird.observe.services.model.referential.ReferentialFormModel; +import fr.ird.observe.services.model.referential.ReferentialFormModels; import fr.ird.observe.services.model.referential.ReferentialLabelSetModel; import fr.ird.observe.services.model.referential.ReferentialModel; +import fr.ird.observe.services.model.referential.SexModel; +import fr.ird.observe.services.model.referential.SpeciesGroupModel; +import fr.ird.observe.services.model.referential.SpeciesListModel; +import fr.ird.observe.services.model.referential.SpeciesModel; +import fr.ird.observe.services.model.referential.VesselModel; +import fr.ird.observe.services.model.referential.VesselSizeCategoryModel; +import fr.ird.observe.services.model.referential.VesselTypeModel; +import org.nuiton.topia.persistence.TopiaEntity; import java.util.Collection; @@ -15,44 +53,151 @@ import java.util.Collection; */ public class ReferentialServiceTopia extends ObserveServiceTopia implements ReferentialService { + protected static final ImmutableMap<Class<?>, Class<?>> MODEL_TO_ENTITY = new ImmutableMap.Builder<Class<?>, Class<?>>() + .put(VesselSizeCategory.class, VesselSizeCategoryModel.class) + .put(Country.class, CountryModel.class) + .put(Harbour.class, HarbourModel.class) + .put(VesselType.class, VesselTypeModel.class) + .put(Vessel.class, VesselModel.class) + .put(SpeciesGroup.class, SpeciesGroupModel.class) + .put(Species.class, SpeciesModel.class) + .put(Sex.class, SexModel.class) + .put(FpaZone.class, FpaZoneModel.class) + .put(SpeciesList.class, SpeciesListModel.class) + .put(Person.class, PersonModel.class) + .put(Ocean.class, OceanModel.class) + .put(Organism.class, OrganismModel.class) + .put(LengthWeightParameter.class, LengthWeightParameterModel.class) + .put(Program.class, ProgramModel.class) + .put(GearCaracteristicType.class, GearCaracteristicTypeModel.class) + .put(GearCaracteristic.class, GearCaracteristicModel.class) + .put(Gear.class, GearModel.class) + +// .put(VesselActivitySeine.class, VesselActivitySeineModel.class) +// .put(SurroundingActivity.class, SurroundingActivityModel.class) +// .put(ReasonForNullSet.class, ReasonForNullSetModel.class) +// .put(ReasonForNoFishing.class, ReasonForNoFishingModel.class) +// .put(SpeciesFate.class, SpeciesFateModel.class) +// .put(ObjectFate.class, ObjectFateModel.class) +// .put(WeightCategory.class, WeightCategoryModel.class) +// .put(DetectionMode.class, DetectionModeModel.class) +// .put(TransmittingBuoyOperation.class, TransmittingBuoyOperationModel.class) +// .put(ObjectOperation.class, ObjectOperationModel.class) +// .put(ReasonForDiscard.class, ReasonForDiscardModel.class) +// .put(SpeciesStatus.class, SpeciesStatusModel.class) +// .put(ObservedSystem.class, ObservedSystemModel.class) +// .put(TransmittingBuoyType.class, TransmittingBuoyTypeModel.class) +// .put(ObjectType.class, ObjectTypeModel.class) +// .put(Wind.class, WindModel.class) + +// .put(BaitHaulingStatus.class, BaitHaulingStatusModel.class) +// .put(BaitSettingStatus.class, BaitSettingStatusModel.class) +// .put(BaitType.class, BaitTypeModel.class) +// .put(CatchFateLongline.class, CatchFateLonglineModel.class) +// .put(EncounterType.class, EncounterTypeModel.class) +// .put(Healthness.class, HealthnessModel.class) +// .put(HookPosition.class, HookPositionModel.class) +// .put(HookSize.class, HookSizeModel.class) +// .put(HookType.class, HookTypeModel.class) +// .put(ItemVerticalPosition.class, ItemVerticalPositionModel.class) +// .put(ItemHorizontalPosition.class, ItemHorizontalPositionModel.class) +// .put(LightsticksColor.class, LightsticksColorModel.class) +// .put(LightsticksType.class, LightsticksTypeModel.class) +// .put(LineType.class, LineTypeModel.class) +// .put(MaturityStatus.class, MaturityStatusModel.class) +// .put(MitigationType.class, MitigationTypeModel.class) +// .put(SensorBrand.class, SensorBrandModel.class) +// .put(SensorDataFormat.class, SensorDataFormatModel.class) +// .put(SensorType.class, SensorTypeModel.class) +// .put(SettingShape.class, SettingShapeModel.class) +// .put(SizeMeasureType.class, SizeMeasureTypeModel.class) +// .put(StomacFullness.class, StomacFullnessModel.class) +// .put(TripType.class, TripTypeModel.class) +// .put(VesselActivityLongline.class, VesselActivityLonglineModel.class) +// .put(WeightMeasureType.classWeightMeasureTypeModel.class) + + .build(); + @Override public <R extends ReferentialModel> ReferentialLabelSetModel getReferentialLabelSet(Class<R> type) { - + Class<? extends TopiaEntity> entityType = getEntityType(type); return new ReferentialLabelSetModel(); } @Override public <R extends ReferentialModel> ReferentialFormModel<R> loadToRead(Class<R> type, String id) { - return null; + Class<? extends TopiaEntity> entityType = getEntityType(type); + TopiaEntity entity = null; + ReferentialFormModel<R> model = entityToReferentialFormModel(type, entity); + return model; } @Override public <R extends ReferentialModel> ReferentialFormModel<R> loadToEdit(Class<R> type, String id) { - return null; + Class<? extends TopiaEntity> entityType = getEntityType(type); + TopiaEntity entity = null; + ReferentialFormModel<R> model = entityToReferentialFormModel(type, entity); + return model; } @Override public <R extends ReferentialModel> ReferentialFormModel<R> preCreate(Class<R> type) { - return null; + Class<? extends TopiaEntity> entityType = getEntityType(type); + TopiaEntity entity = null; + ReferentialFormModel<R> model = entityToReferentialFormModel(type, entity); + return model; } @Override public <R extends ReferentialModel> String save(ReferentialFormModel<R> form) { - return null; + Class<R> type = form.getType(); + Class<? extends TopiaEntity> entityType = getEntityType(type); + TopiaEntity entity = referentialModelToEntity(form.getForm()); + // Save + ReferentialFormModel<R> model = entityToReferentialFormModel(type, entity); + return model.getForm().getId(); } @Override public <R extends ReferentialModel> void delete(Class<R> type, String id) { + Class<? extends TopiaEntity> entityType = getEntityType(type); } @Override public <R extends ReferentialModel> void delete(Class<R> type, Collection<String> ids) { + Class<? extends TopiaEntity> entityType = getEntityType(type); } - @Override - public void setServiceContext(ObserveServiceContext serviceContext) { + protected <R extends ReferentialModel> ReferentialFormModel<R> entityToReferentialFormModel(Class<R> type, TopiaEntity entity) { + R referentialModel = toModel(type, entity); + ReferentialFormModel<R> referentialFormModel = ReferentialFormModels.newReferentialFormModel(type); + referentialFormModel.setForm(referentialModel); + return referentialFormModel; + } + + protected <R extends ReferentialModel, E extends TopiaEntity> E referentialModelToEntity(R model) { + E entity = null; + return null; + } + + protected <R extends ReferentialModel> Class<? extends TopiaEntity> getEntityType(Class<R> type) { + Class<?> entityType = MODEL_TO_ENTITY.get(type); + return (Class<? extends TopiaEntity>) entityType; + } + + protected <M extends ReferentialModel> M toModel(Class<M> modelType, TopiaEntity entity) { + + try { + M model = modelType.newInstance(); + try (EntityToModelVisitor<M> visitor = new EntityToModelVisitor<>(model)) { + entity.accept(visitor); + } + return model; + } catch (InstantiationException | IllegalAccessException e) { + throw new IllegalStateException("Could not create model of type: " + modelType.getName()); + } } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.