Loading src/main/java/es/redmic/commandslib/usersettings/aggregate/PersistenceAggregate.java 0 → 100644 +166 −0 Original line number Diff line number Diff line package es.redmic.commandslib.usersettings.aggregate; /*- * #%L * commands-lib * %% * Copyright (C) 2019 REDMIC Project / Server * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import es.redmic.brokerlib.avro.common.Event; import es.redmic.commandslib.aggregate.Aggregate; import es.redmic.commandslib.usersettings.commands.DeleteSettingsCommand; import es.redmic.commandslib.usersettings.commands.SaveSettingsCommand; import es.redmic.commandslib.usersettings.commands.UpdateSettingsCommand; import es.redmic.commandslib.usersettings.statestore.SettingsStateStore; import es.redmic.usersettingslib.dto.PersistenceDTO; import es.redmic.usersettingslib.events.SettingsEventTypes; import es.redmic.usersettingslib.events.common.PersistenceCancelledEvent; import es.redmic.usersettingslib.events.common.PersistenceEvent; import es.redmic.usersettingslib.events.delete.DeleteSettingsEvent; import es.redmic.usersettingslib.events.delete.SettingsDeletedEvent; import es.redmic.usersettingslib.events.save.SaveSettingsEvent; public class PersistenceAggregate extends Aggregate { private PersistenceDTO persistence; private SettingsStateStore settingsStateStore; public PersistenceAggregate(SettingsStateStore settingsStateStore) { this.settingsStateStore = settingsStateStore; } public SaveSettingsEvent process(SaveSettingsCommand cmd) { assert settingsStateStore != null; String id = cmd.getPersistence().getId(); if (exist(id)) { logger.info("Descartando selección " + id + ". Ya está registrado."); return null; // Se lanza excepción en el origen no aquí } this.setAggregateId(id); SaveSettingsEvent evt = new SaveSettingsEvent(cmd.getPersistence()); evt.setAggregateId(id); evt.setVersion(1); return evt; } public SaveSettingsEvent process(UpdateSettingsCommand cmd) { assert settingsStateStore != null; String id = cmd.getPersistence().getId(); Event state = getStateFromHistory(id); loadFromHistory(state); checkState(id, state.getType()); SaveSettingsEvent evt = new SaveSettingsEvent(cmd.getPersistence()); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } public DeleteSettingsEvent process(DeleteSettingsCommand cmd) { assert settingsStateStore != null; String id = cmd.getSettingsId(); Event state = getStateFromHistory(id); loadFromHistory(state); checkState(id, state.getType()); DeleteSettingsEvent evt = new DeleteSettingsEvent(); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } public PersistenceDTO getPersistence() { return persistence; } @Override protected boolean isLocked(String eventType) { return SettingsEventTypes.isLocked(eventType); } @Override protected Event getItemFromStateStore(String id) { return settingsStateStore.get(id); } @Override public void loadFromHistory(Event event) { logger.debug("Cargando último estado de Category ", event.getAggregateId()); check(event); String eventType = event.getType(); switch (eventType) { case "SAVED": logger.debug("Settings guardada"); apply((PersistenceEvent) event); break; case "DELETED": logger.debug("Settings borrada"); apply((SettingsDeletedEvent) event); break; // CANCELLED case "SAVE_CANCELLED": case "DELETE_CANCELLED": logger.debug("Compensación por guardado/borrado fallido"); apply((PersistenceCancelledEvent) event); break; default: logger.debug("Evento no manejado ", event.getType()); } } public void apply(PersistenceEvent evt) { super.apply(evt); this.persistence = evt.getPersistence(); } public void apply(SettingsDeletedEvent evt) { super.apply(evt); this.deleted = true; } public void apply(PersistenceCancelledEvent evt) { super.apply(evt); this.persistence = evt.getPersistence(); } @Override protected void reset() { this.persistence = null; super.reset(); } } src/main/java/es/redmic/commandslib/usersettings/aggregate/SelectionAggregate.java 0 → 100644 +161 −0 Original line number Diff line number Diff line package es.redmic.commandslib.usersettings.aggregate; /*- * #%L * commands-lib * %% * Copyright (C) 2019 REDMIC Project / Server * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import es.redmic.brokerlib.avro.common.Event; import es.redmic.commandslib.aggregate.Aggregate; import es.redmic.commandslib.usersettings.commands.ClearCommand; import es.redmic.commandslib.usersettings.commands.DeselectCommand; import es.redmic.commandslib.usersettings.commands.SelectCommand; import es.redmic.commandslib.usersettings.statestore.SettingsStateStore; import es.redmic.usersettingslib.dto.SelectionDTO; import es.redmic.usersettingslib.events.SettingsEventTypes; import es.redmic.usersettingslib.events.clear.ClearEvent; import es.redmic.usersettingslib.events.common.SelectionCancelledEvent; import es.redmic.usersettingslib.events.common.SelectionEvent; import es.redmic.usersettingslib.events.deselect.DeselectEvent; import es.redmic.usersettingslib.events.select.SelectEvent; public class SelectionAggregate extends Aggregate { private SelectionDTO selection; private SettingsStateStore settingsStateStore; public SelectionAggregate(SettingsStateStore settingsStateStore) { this.settingsStateStore = settingsStateStore; } public SelectEvent process(SelectCommand cmd) { assert settingsStateStore != null; String id = cmd.getSelection().getId(); if (exist(id)) { logger.info("Descartando selección " + id + ". Ya está registrado."); return null; // Se lanza excepción en el origen no aquí } this.setAggregateId(id); SelectEvent evt = new SelectEvent(cmd.getSelection()); evt.setAggregateId(id); evt.setVersion(1); return evt; } public DeselectEvent process(DeselectCommand cmd) { assert settingsStateStore != null; String id = cmd.getSelection().getId(); Event state = getStateFromHistory(id); loadFromHistory(state); checkState(id, state.getType()); DeselectEvent evt = new DeselectEvent(cmd.getSelection()); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } public ClearEvent process(ClearCommand cmd) { assert settingsStateStore != null; String id = cmd.getSelection().getId(); Event state = getStateFromHistory(id); loadFromHistory(state); checkState(id, state.getType()); ClearEvent evt = new ClearEvent(cmd.getSelection()); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } public SelectionDTO getSelection() { return selection; } @Override protected boolean isLocked(String eventType) { return SettingsEventTypes.isLocked(eventType); } @Override protected Event getItemFromStateStore(String id) { return settingsStateStore.get(id); } @Override public void loadFromHistory(Event event) { logger.debug("Cargando último estado de Category ", event.getAggregateId()); check(event); String eventType = event.getType(); switch (eventType) { case "SELECTED": case "DESELECTED": case "CLEARED": logger.debug("Selección modificada"); apply((SelectionEvent) event); break; // CANCELLED case "SELECT_CANCELLED": case "DESELECT_CANCELLED": case "CLEAR_CANCELLED": logger.debug("Compensación por selección fallida"); apply((SelectionCancelledEvent) event); break; default: logger.debug("Evento no manejado ", event.getType()); } } public void apply(SelectionEvent evt) { super.apply(evt); selection = evt.getSelection(); } public void apply(SelectionCancelledEvent evt) { super.apply(evt); selection = evt.getSelection(); } @Override protected void reset() { this.selection = null; super.reset(); } } Loading
src/main/java/es/redmic/commandslib/usersettings/aggregate/PersistenceAggregate.java 0 → 100644 +166 −0 Original line number Diff line number Diff line package es.redmic.commandslib.usersettings.aggregate; /*- * #%L * commands-lib * %% * Copyright (C) 2019 REDMIC Project / Server * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import es.redmic.brokerlib.avro.common.Event; import es.redmic.commandslib.aggregate.Aggregate; import es.redmic.commandslib.usersettings.commands.DeleteSettingsCommand; import es.redmic.commandslib.usersettings.commands.SaveSettingsCommand; import es.redmic.commandslib.usersettings.commands.UpdateSettingsCommand; import es.redmic.commandslib.usersettings.statestore.SettingsStateStore; import es.redmic.usersettingslib.dto.PersistenceDTO; import es.redmic.usersettingslib.events.SettingsEventTypes; import es.redmic.usersettingslib.events.common.PersistenceCancelledEvent; import es.redmic.usersettingslib.events.common.PersistenceEvent; import es.redmic.usersettingslib.events.delete.DeleteSettingsEvent; import es.redmic.usersettingslib.events.delete.SettingsDeletedEvent; import es.redmic.usersettingslib.events.save.SaveSettingsEvent; public class PersistenceAggregate extends Aggregate { private PersistenceDTO persistence; private SettingsStateStore settingsStateStore; public PersistenceAggregate(SettingsStateStore settingsStateStore) { this.settingsStateStore = settingsStateStore; } public SaveSettingsEvent process(SaveSettingsCommand cmd) { assert settingsStateStore != null; String id = cmd.getPersistence().getId(); if (exist(id)) { logger.info("Descartando selección " + id + ". Ya está registrado."); return null; // Se lanza excepción en el origen no aquí } this.setAggregateId(id); SaveSettingsEvent evt = new SaveSettingsEvent(cmd.getPersistence()); evt.setAggregateId(id); evt.setVersion(1); return evt; } public SaveSettingsEvent process(UpdateSettingsCommand cmd) { assert settingsStateStore != null; String id = cmd.getPersistence().getId(); Event state = getStateFromHistory(id); loadFromHistory(state); checkState(id, state.getType()); SaveSettingsEvent evt = new SaveSettingsEvent(cmd.getPersistence()); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } public DeleteSettingsEvent process(DeleteSettingsCommand cmd) { assert settingsStateStore != null; String id = cmd.getSettingsId(); Event state = getStateFromHistory(id); loadFromHistory(state); checkState(id, state.getType()); DeleteSettingsEvent evt = new DeleteSettingsEvent(); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } public PersistenceDTO getPersistence() { return persistence; } @Override protected boolean isLocked(String eventType) { return SettingsEventTypes.isLocked(eventType); } @Override protected Event getItemFromStateStore(String id) { return settingsStateStore.get(id); } @Override public void loadFromHistory(Event event) { logger.debug("Cargando último estado de Category ", event.getAggregateId()); check(event); String eventType = event.getType(); switch (eventType) { case "SAVED": logger.debug("Settings guardada"); apply((PersistenceEvent) event); break; case "DELETED": logger.debug("Settings borrada"); apply((SettingsDeletedEvent) event); break; // CANCELLED case "SAVE_CANCELLED": case "DELETE_CANCELLED": logger.debug("Compensación por guardado/borrado fallido"); apply((PersistenceCancelledEvent) event); break; default: logger.debug("Evento no manejado ", event.getType()); } } public void apply(PersistenceEvent evt) { super.apply(evt); this.persistence = evt.getPersistence(); } public void apply(SettingsDeletedEvent evt) { super.apply(evt); this.deleted = true; } public void apply(PersistenceCancelledEvent evt) { super.apply(evt); this.persistence = evt.getPersistence(); } @Override protected void reset() { this.persistence = null; super.reset(); } }
src/main/java/es/redmic/commandslib/usersettings/aggregate/SelectionAggregate.java 0 → 100644 +161 −0 Original line number Diff line number Diff line package es.redmic.commandslib.usersettings.aggregate; /*- * #%L * commands-lib * %% * Copyright (C) 2019 REDMIC Project / Server * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import es.redmic.brokerlib.avro.common.Event; import es.redmic.commandslib.aggregate.Aggregate; import es.redmic.commandslib.usersettings.commands.ClearCommand; import es.redmic.commandslib.usersettings.commands.DeselectCommand; import es.redmic.commandslib.usersettings.commands.SelectCommand; import es.redmic.commandslib.usersettings.statestore.SettingsStateStore; import es.redmic.usersettingslib.dto.SelectionDTO; import es.redmic.usersettingslib.events.SettingsEventTypes; import es.redmic.usersettingslib.events.clear.ClearEvent; import es.redmic.usersettingslib.events.common.SelectionCancelledEvent; import es.redmic.usersettingslib.events.common.SelectionEvent; import es.redmic.usersettingslib.events.deselect.DeselectEvent; import es.redmic.usersettingslib.events.select.SelectEvent; public class SelectionAggregate extends Aggregate { private SelectionDTO selection; private SettingsStateStore settingsStateStore; public SelectionAggregate(SettingsStateStore settingsStateStore) { this.settingsStateStore = settingsStateStore; } public SelectEvent process(SelectCommand cmd) { assert settingsStateStore != null; String id = cmd.getSelection().getId(); if (exist(id)) { logger.info("Descartando selección " + id + ". Ya está registrado."); return null; // Se lanza excepción en el origen no aquí } this.setAggregateId(id); SelectEvent evt = new SelectEvent(cmd.getSelection()); evt.setAggregateId(id); evt.setVersion(1); return evt; } public DeselectEvent process(DeselectCommand cmd) { assert settingsStateStore != null; String id = cmd.getSelection().getId(); Event state = getStateFromHistory(id); loadFromHistory(state); checkState(id, state.getType()); DeselectEvent evt = new DeselectEvent(cmd.getSelection()); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } public ClearEvent process(ClearCommand cmd) { assert settingsStateStore != null; String id = cmd.getSelection().getId(); Event state = getStateFromHistory(id); loadFromHistory(state); checkState(id, state.getType()); ClearEvent evt = new ClearEvent(cmd.getSelection()); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); return evt; } public SelectionDTO getSelection() { return selection; } @Override protected boolean isLocked(String eventType) { return SettingsEventTypes.isLocked(eventType); } @Override protected Event getItemFromStateStore(String id) { return settingsStateStore.get(id); } @Override public void loadFromHistory(Event event) { logger.debug("Cargando último estado de Category ", event.getAggregateId()); check(event); String eventType = event.getType(); switch (eventType) { case "SELECTED": case "DESELECTED": case "CLEARED": logger.debug("Selección modificada"); apply((SelectionEvent) event); break; // CANCELLED case "SELECT_CANCELLED": case "DESELECT_CANCELLED": case "CLEAR_CANCELLED": logger.debug("Compensación por selección fallida"); apply((SelectionCancelledEvent) event); break; default: logger.debug("Evento no manejado ", event.getType()); } } public void apply(SelectionEvent evt) { super.apply(evt); selection = evt.getSelection(); } public void apply(SelectionCancelledEvent evt) { super.apply(evt); selection = evt.getSelection(); } @Override protected void reset() { this.selection = null; super.reset(); } }