diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/FilterParams.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/FilterParams.java index df5fe1eee..8d385e3ae 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/FilterParams.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/FilterParams.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.repository; import java.util.Collection; +import lombok.Data; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; @@ -18,8 +19,8 @@ import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; * Encapsulates a set of filters that may be specified (optionally). Properties * that are not specified (e.g. null for simple properties) When * applied, these filters are AND-gated. - * */ +@Data public class FilterParams { private final Collection filterByStatus; @@ -61,7 +62,6 @@ public class FilterParams { this.filterByTagNames = filterByTagNames; this.selectTargetWithNoTargetType = false; this.filterByTargetType = null; - } /** @@ -88,86 +88,4 @@ public class FilterParams { this.selectTargetWithNoTargetType = selectTargetWithNoType; this.filterByTargetType = filterByType; } - - /** - * Gets {@link DistributionSet#getId()} to filter the result.
- * If set to null this filter is disabled. - * - * @return {@link DistributionSet#getId()} to filter the result - */ - public Long getFilterByDistributionId() { - return filterByDistributionId; - } - - /** - * Gets a collection of target states to filter for.
- * If set to null this filter is disabled. - * - * @return collection of target states to filter for - */ - public Collection getFilterByStatus() { - return filterByStatus; - } - - /** - * Gets the flag for overdue filter; if set to true, the - * overdue filter is activated. Overdued targets a targets that did not - * respond during the configured intervals: poll_itvl + overdue_itvl.
- * If set to null this filter is disabled. - * - * @return flag for overdue filter activation - */ - public Boolean getOverdueState() { - return overdueState; - } - - /** - * Gets the search text to filter for. This is used to find targets having - * the text anywhere in name or description
- * If set to null this filter is disabled. - * - * @return the search text to filter for - */ - public String getFilterBySearchText() { - return filterBySearchText; - } - - /** - * Gets the flag indicating if tagging filter is used.
- * If set to null this filter is disabled. - * - * @return the flag indicating if tagging filter is used - */ - public Boolean getSelectTargetWithNoTag() { - return selectTargetWithNoTag; - } - - /** - * Gets the tags that are used to filter for. The activation of this filter - * is done by {@link #setSelectTargetWithNoTag(Boolean)}. - * - * @return the tags that are used to filter for - */ - public String[] getFilterByTagNames() { - return filterByTagNames; - } - - /** - * Gets the flag indicating if no target type filter is used.
- * If set to false this filter is disabled. - * - * @return the flag indicating if no target type filter is used - */ - public Boolean getSelectTargetWithNoTargetType() { - return selectTargetWithNoTargetType; - } - - /** - * Gets the target type - * - * @return the target type that are used to filter for - */ - public Long getFilterByTargetType() { - return filterByTargetType; - } } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java index 87888c772..b024dbf3a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/OffsetBasedPageRequest.java @@ -9,6 +9,7 @@ */ package org.eclipse.hawkbit.repository; +import lombok.Data; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; @@ -19,9 +20,11 @@ import org.springframework.data.domain.Sort; * the REST-API is working with {@code offset} and {@code limit} parameter we * need an offset based page request. */ +@Data public final class OffsetBasedPageRequest extends PageRequest { private static final long serialVersionUID = 1L; + private final long offset; /** @@ -52,42 +55,4 @@ public final class OffsetBasedPageRequest extends PageRequest { super(0, limit, sort); this.offset = offset; } - - @Override - public long getOffset() { - return offset; - } - - @Override - public String toString() { - return "OffsetBasedPageRequest [offset=" + offset + ", getPageSize()=" + getPageSize() + ", getPageNumber()=" - + getPageNumber() + "]"; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + (int) (offset ^ (offset >>> 32)); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (!super.equals(obj)) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final OffsetBasedPageRequest other = (OffsetBasedPageRequest) obj; - if (offset != other.offset) { - return false; - } - return true; - } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryProperties.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryProperties.java index 587e6d7ba..ea820edbd 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryProperties.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/RepositoryProperties.java @@ -11,14 +11,15 @@ package org.eclipse.hawkbit.repository; import java.util.concurrent.TimeUnit; +import lombok.Data; import org.eclipse.hawkbit.repository.event.remote.TargetPollEvent; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.springframework.boot.context.properties.ConfigurationProperties; /** * Configuration properties for the repository. - * */ +@Data @ConfigurationProperties("hawkbit.server.repository") public class RepositoryProperties { @@ -67,68 +68,4 @@ public class RepositoryProperties { private long dsInvalidationLockTimeout = 5; private boolean implicitTenantCreateAllowed; - - public boolean isEagerPollPersistence() { - return eagerPollPersistence; - } - - public void setEagerPollPersistence(final boolean eagerPollPersistence) { - this.eagerPollPersistence = eagerPollPersistence; - } - - public long getPollPersistenceFlushTime() { - return pollPersistenceFlushTime; - } - - public void setPollPersistenceFlushTime(final long pollPersistenceFlushTime) { - this.pollPersistenceFlushTime = pollPersistenceFlushTime; - } - - public int getPollPersistenceQueueSize() { - return pollPersistenceQueueSize; - } - - public void setPollPersistenceQueueSize(final int pollPersistenceQueueSize) { - this.pollPersistenceQueueSize = pollPersistenceQueueSize; - } - - public boolean isRejectActionStatusForClosedAction() { - return rejectActionStatusForClosedAction; - } - - public void setRejectActionStatusForClosedAction(final boolean rejectActionStatusForClosedAction) { - this.rejectActionStatusForClosedAction = rejectActionStatusForClosedAction; - } - - public boolean isPublishTargetPollEvent() { - return publishTargetPollEvent; - } - - public void setPublishTargetPollEvent(final boolean publishTargetPollEvent) { - this.publishTargetPollEvent = publishTargetPollEvent; - } - - public int getActionWeightIfAbsent() { - return actionWeightIfAbsent; - } - - public void setActionWeightIfAbsent(final int actionWeightIfAbsent) { - this.actionWeightIfAbsent = actionWeightIfAbsent; - } - - public long getDsInvalidationLockTimeout() { - return dsInvalidationLockTimeout; - } - - public void setDsInvalidationLockTimeout(final long dsInvalidationLockTimeout) { - this.dsInvalidationLockTimeout = dsInvalidationLockTimeout; - } - - public boolean isImplicitTenantCreateAllowed() { - return implicitTenantCreateAllowed; - } - - public void setImplicitTenantCreateAllowed(final boolean implicitTenantCreateAllowed) { - this.implicitTenantCreateAllowed = implicitTenantCreateAllowed; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/AutoAssignDistributionSetUpdate.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/AutoAssignDistributionSetUpdate.java index eddf843db..f8e15139a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/AutoAssignDistributionSetUpdate.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/AutoAssignDistributionSetUpdate.java @@ -12,6 +12,8 @@ package org.eclipse.hawkbit.repository.builder; import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Min; +import lombok.EqualsAndHashCode; +import lombok.Getter; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -21,7 +23,10 @@ import org.eclipse.hawkbit.repository.model.TargetFilterQuery; * Builder to update the auto assign {@link DistributionSet} of a * {@link TargetFilterQuery} entry. Defines all fields that can be updated. */ +@Getter +@EqualsAndHashCode public class AutoAssignDistributionSetUpdate { + private final long targetFilterId; private Long dsId; private ActionType actionType; @@ -90,25 +95,4 @@ public class AutoAssignDistributionSetUpdate { this.confirmationRequired = confirmationRequired; return this; } - - public Long getDsId() { - return dsId; - } - - public ActionType getActionType() { - return actionType; - } - - public Integer getWeight() { - return weight; - } - - public Boolean isConfirmationRequired() { - return confirmationRequired; - } - - public long getTargetFilterId() { - return targetFilterId; - } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/CustomEvents.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/CustomEvents.java index d2476b04e..d9f9e0111 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/CustomEvents.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/CustomEvents.java @@ -19,7 +19,5 @@ package org.eclipse.hawkbit.repository.event; public enum CustomEvents { TARGETS_CREATED_EVENT, - DISTRIBUTION_CREATED_EVENT - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/AbstractAssignmentEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/AbstractAssignmentEvent.java index ab8bf43bb..0cb14e909 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/AbstractAssignmentEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/AbstractAssignmentEvent.java @@ -9,6 +9,7 @@ */ package org.eclipse.hawkbit.repository.event.remote; +import lombok.Data; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.ActionProperties; @@ -21,6 +22,7 @@ import java.util.stream.Collectors; /** * Abstract class providing information about an assignment. */ +@Data public abstract class AbstractAssignmentEvent extends RemoteTenantAwareEvent { private static final long serialVersionUID = 1L; @@ -46,12 +48,7 @@ public abstract class AbstractAssignmentEvent extends RemoteTenantAwareEvent { .collect(Collectors.toMap(action -> action.getTarget().getControllerId(), ActionProperties::new))); } - public Map getActions() { - return actions; - } - public Optional getActionPropertiesForController(final String controllerId) { return Optional.ofNullable(actions.get(controllerId)); } - } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/CancelTargetAssignmentEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/CancelTargetAssignmentEvent.java index 5eaa04e4a..668d43ce4 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/CancelTargetAssignmentEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/CancelTargetAssignmentEvent.java @@ -36,5 +36,4 @@ public class CancelTargetAssignmentEvent extends AbstractAssignmentEvent { super(applicationId, tenant, a, applicationId); } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/MultiActionAssignEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/MultiActionAssignEvent.java index c8e3a1737..a2affee83 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/MultiActionAssignEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/MultiActionAssignEvent.java @@ -44,5 +44,4 @@ public class MultiActionAssignEvent extends MultiActionEvent { public MultiActionAssignEvent(String tenant, String applicationId, List actions) { super(tenant, applicationId, actions); } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/MultiActionCancelEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/MultiActionCancelEvent.java index 8bd2df858..e770749b3 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/MultiActionCancelEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/MultiActionCancelEvent.java @@ -44,5 +44,4 @@ public class MultiActionCancelEvent extends MultiActionEvent { public MultiActionCancelEvent(String tenant, String applicationId, List actions) { super(tenant, applicationId, actions); } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/MultiActionEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/MultiActionEvent.java index f94d92498..5f45e969a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/MultiActionEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/MultiActionEvent.java @@ -14,6 +14,7 @@ import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; +import lombok.Data; import org.eclipse.hawkbit.repository.Identifiable; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.Target; @@ -24,6 +25,7 @@ import org.eclipse.hawkbit.repository.model.Target; * a deployment action (e.g. a software assignment (update) or a cancellation of * an update). */ +@Data public abstract class MultiActionEvent extends RemoteTenantAwareEvent implements Iterable { private static final long serialVersionUID = 1L; @@ -54,19 +56,11 @@ public abstract class MultiActionEvent extends RemoteTenantAwareEvent implements this.actionIds.addAll(getIdsFromActions(actions)); } - public List getControllerIds() { - return controllerIds; - } - @Override public Iterator iterator() { return controllerIds.iterator(); } - public List getActionIds() { - return actionIds; - } - private static List getControllerIdsFromActions(final List actions) { return actions.stream().map(Action::getTarget).map(Target::getControllerId).distinct() .collect(Collectors.toList()); diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RemoteIdEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RemoteIdEvent.java index a30ebafaf..7a4e01881 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RemoteIdEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RemoteIdEvent.java @@ -9,14 +9,17 @@ */ package org.eclipse.hawkbit.repository.event.remote; +import lombok.EqualsAndHashCode; +import lombok.Getter; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import java.util.Arrays; /** * An base definition class for an event which contains an id. - * */ +@Getter +@EqualsAndHashCode public class RemoteIdEvent extends RemoteTenantAwareEvent { private static final long serialVersionUID = 1L; @@ -60,19 +63,4 @@ public class RemoteIdEvent extends RemoteTenantAwareEvent { return Arrays.stream(interfaces).filter(TenantAwareBaseEntity.class::isAssignableFrom).findFirst() .orElse(baseEntity); } - - /** - * @return the entityClass - */ - public String getEntityClass() { - return entityClass; - } - - public Long getEntityId() { - return entityId; - } - - public String getInterfaceClass() { - return interfaceClass; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RemoteTenantAwareEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RemoteTenantAwareEvent.java index ac66358b4..933fd4de4 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RemoteTenantAwareEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RemoteTenantAwareEvent.java @@ -9,6 +9,8 @@ */ package org.eclipse.hawkbit.repository.event.remote; +import lombok.EqualsAndHashCode; +import lombok.Getter; import org.eclipse.hawkbit.repository.event.TenantAwareEvent; import org.springframework.cloud.bus.event.RemoteApplicationEvent; @@ -18,9 +20,11 @@ import com.cronutils.utils.StringUtils; * A distributed tenant aware event. It's the base class of the other * distributed events. All the necessary information of distributing events to * other nodes. - * */ +@Getter +@EqualsAndHashCode public class RemoteTenantAwareEvent extends RemoteApplicationEvent implements TenantAwareEvent { + private static final long serialVersionUID = 1L; private String tenant; @@ -47,10 +51,4 @@ public class RemoteTenantAwareEvent extends RemoteApplicationEvent implements Te super(source, applicationId != null ? applicationId : StringUtils.EMPTY); this.tenant = tenant; } - - @Override - public String getTenant() { - return tenant; - } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RolloutDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RolloutDeletedEvent.java index e2aed91c9..014851507 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RolloutDeletedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RolloutDeletedEvent.java @@ -44,5 +44,4 @@ public class RolloutDeletedEvent extends RemoteIdEvent implements EntityDeletedE final Class entityClass, final String applicationId) { super(entityId, tenant, entityClass, applicationId); } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RolloutGroupDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RolloutGroupDeletedEvent.java index e96d0efec..8cded069a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RolloutGroupDeletedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RolloutGroupDeletedEvent.java @@ -44,5 +44,4 @@ public class RolloutGroupDeletedEvent extends RemoteIdEvent implements EntityDel final Class entityClass, final String applicationId) { super(entityId, tenant, entityClass, applicationId); } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RolloutStoppedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RolloutStoppedEvent.java index df89a7dc8..e449e4927 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RolloutStoppedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/RolloutStoppedEvent.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.repository.event.remote; import java.util.Collection; +import lombok.Data; import org.eclipse.hawkbit.repository.model.DistributionSet; /** @@ -18,6 +19,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; * Event that is published when a rollout is stopped due to invalidation of a * {@link DistributionSet}. */ +@Data public class RolloutStoppedEvent extends RemoteTenantAwareEvent { private static final long serialVersionUID = 1L; @@ -50,21 +52,4 @@ public class RolloutStoppedEvent extends RemoteTenantAwareEvent { this.rolloutId = rolloutId; this.rolloutGroupIds = rolloutGroupIds; } - - public Collection getRolloutGroupIds() { - return rolloutGroupIds; - } - - public void setRolloutGroupIds(final Collection rolloutGroupIds) { - this.rolloutGroupIds = rolloutGroupIds; - } - - public long getRolloutId() { - return rolloutId; - } - - public void setRolloutId(final long rolloutId) { - this.rolloutId = rolloutId; - } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/SoftwareModuleDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/SoftwareModuleDeletedEvent.java index 98c8cf60c..665df95c2 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/SoftwareModuleDeletedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/SoftwareModuleDeletedEvent.java @@ -44,5 +44,4 @@ public class SoftwareModuleDeletedEvent extends RemoteIdEvent implements EntityD final Class entityClass, final String applicationId) { super(entityId, tenant, entityClass, applicationId); } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/SoftwareModuleTypeDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/SoftwareModuleTypeDeletedEvent.java index 36840a260..3fde104b3 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/SoftwareModuleTypeDeletedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/SoftwareModuleTypeDeletedEvent.java @@ -44,5 +44,4 @@ public class SoftwareModuleTypeDeletedEvent extends RemoteIdEvent implements Ent final Class entityClass, final String applicationId) { super(entityId, tenant, entityClass, applicationId); } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetAssignDistributionSetEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetAssignDistributionSetEvent.java index 4c2a6484b..99865bc29 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetAssignDistributionSetEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetAssignDistributionSetEvent.java @@ -13,12 +13,16 @@ import java.util.Collections; import java.util.List; import java.util.stream.Collectors; +import lombok.EqualsAndHashCode; +import lombok.Getter; import org.eclipse.hawkbit.repository.model.Action; /** * TenantAwareEvent that gets sent when a distribution set gets assigned to a * target. */ +@Getter +@EqualsAndHashCode public class TargetAssignDistributionSetEvent extends AbstractAssignmentEvent { private static final long serialVersionUID = 1L; @@ -70,13 +74,4 @@ public class TargetAssignDistributionSetEvent extends AbstractAssignmentEvent { this(action.getTenant(), action.getDistributionSet().getId(), Collections.singletonList(action), applicationId, action.isMaintenanceWindowAvailable()); } - - public Long getDistributionSetId() { - return distributionSetId; - } - - public boolean isMaintenanceWindowAvailable() { - return maintenanceWindowAvailable; - } - } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetAttributesRequestedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetAttributesRequestedEvent.java index 4d2143991..c05f74eea 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetAttributesRequestedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetAttributesRequestedEvent.java @@ -9,12 +9,16 @@ */ package org.eclipse.hawkbit.repository.event.remote; +import lombok.EqualsAndHashCode; +import lombok.Getter; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; /** * Defines the remote event of triggering attribute updates of a {@link Target}. */ +@Getter +@EqualsAndHashCode public class TargetAttributesRequestedEvent extends RemoteIdEvent { private static final long serialVersionUID = 1L; private String controllerId; @@ -50,12 +54,4 @@ public class TargetAttributesRequestedEvent extends RemoteIdEvent { this.controllerId = controllerId; this.targetAddress = targetAddress; } - - public String getControllerId() { - return controllerId; - } - - public String getTargetAddress() { - return targetAddress; - } } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetDeletedEvent.java index ebe8b1018..52715c89a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetDeletedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetDeletedEvent.java @@ -9,14 +9,17 @@ */ package org.eclipse.hawkbit.repository.event.remote; +import lombok.EqualsAndHashCode; +import lombok.Getter; import org.eclipse.hawkbit.repository.event.entity.EntityDeletedEvent; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; /** - * * Defines the remote event of deleting a {@link Target}. */ +@Getter +@EqualsAndHashCode public class TargetDeletedEvent extends RemoteIdEvent implements EntityDeletedEvent { private static final long serialVersionUID = 2L; @@ -52,13 +55,4 @@ public class TargetDeletedEvent extends RemoteIdEvent implements EntityDeletedEv this.controllerId = controllerId; this.targetAddress = targetAddress; } - - public String getControllerId() { - return controllerId; - } - - public String getTargetAddress() { - return targetAddress; - } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetPollEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetPollEvent.java index b829dffb7..2799ee42f 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetPollEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetPollEvent.java @@ -9,11 +9,15 @@ */ package org.eclipse.hawkbit.repository.event.remote; +import lombok.EqualsAndHashCode; +import lombok.Getter; import org.eclipse.hawkbit.repository.model.Target; /** * Event is send in case a target polls either through DDI or DMF. */ +@Getter +@EqualsAndHashCode public class TargetPollEvent extends RemoteTenantAwareEvent { private static final long serialVersionUID = 1L; @@ -37,12 +41,4 @@ public class TargetPollEvent extends RemoteTenantAwareEvent { this.controllerId = target.getControllerId(); this.targetAdress = target.getAddress().toString(); } - - public String getControllerId() { - return controllerId; - } - - public String getTargetAdress() { - return targetAdress; - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetTagDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetTagDeletedEvent.java index 8ff2665c2..1eedb41a0 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetTagDeletedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetTagDeletedEvent.java @@ -44,4 +44,4 @@ public class TargetTagDeletedEvent extends RemoteIdEvent implements EntityDelete final Class entityClass, final String applicationId) { super(entityId, tenant, entityClass, applicationId); } -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetTypeDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetTypeDeletedEvent.java index 9436953fe..058cfcd92 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetTypeDeletedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TargetTypeDeletedEvent.java @@ -44,5 +44,4 @@ public class TargetTypeDeletedEvent extends RemoteIdEvent implements EntityDelet final Class entityClass, final String applicationId) { super(entityId, tenant, entityClass, applicationId); } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TenantConfigurationDeletedEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TenantConfigurationDeletedEvent.java index 6ec859f80..31db94c07 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TenantConfigurationDeletedEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/TenantConfigurationDeletedEvent.java @@ -9,17 +9,23 @@ */ package org.eclipse.hawkbit.repository.event.remote; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; import org.eclipse.hawkbit.repository.event.entity.EntityDeletedEvent; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; /** - * * Defines the remote event of deleting a {@link org.eclipse.hawkbit.repository.model.TenantConfiguration}. */ +@Getter +@EqualsAndHashCode public class TenantConfigurationDeletedEvent extends RemoteIdEvent implements EntityDeletedEvent { private static final long serialVersionUID = 2L; + private String configKey; + @ToString.Exclude private String configValue; /** @@ -51,12 +57,4 @@ public class TenantConfigurationDeletedEvent extends RemoteIdEvent implements En this.configKey = configKey; this.configValue = configValue; } - - public String getConfigKey() { - return configKey; - } - - public String getConfigValue() { - return configValue; - } } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReport.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReport.java index db9295581..61cc6a57a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReport.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReport.java @@ -9,11 +9,15 @@ */ package org.eclipse.hawkbit.repository.report.model; +import lombok.Data; + /** * Bean for holding the system usage stats. * */ +@Data public class SystemUsageReport { + private final long overallTargets; private final long overallArtifacts; private final long overallArtifactVolumeInBytes; @@ -42,24 +46,4 @@ public class SystemUsageReport { this.overallArtifactVolumeInBytes = overallArtifactVolumeInBytes; this.overallTenants = overallTenants; } - - public long getOverallTargets() { - return overallTargets; - } - - public long getOverallArtifacts() { - return overallArtifacts; - } - - public long getOverallArtifactVolumeInBytes() { - return overallArtifactVolumeInBytes; - } - - public long getOverallActions() { - return overallActions; - } - - public long getOverallTenants() { - return overallTenants; - } } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReportWithTenants.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReportWithTenants.java index 4a63917d6..30a92ceeb 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReportWithTenants.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/SystemUsageReportWithTenants.java @@ -54,5 +54,4 @@ public class SystemUsageReportWithTenants extends SystemUsageReport { public List getTenants() { return Collections.unmodifiableList(tenants); } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java index 2b7bc0ac9..89069ab17 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java @@ -9,14 +9,16 @@ */ package org.eclipse.hawkbit.repository.report.model; +import lombok.Data; + import java.util.Collections; import java.util.HashMap; import java.util.Map; /** * System usage stats element for a tenant. - * */ +@Data public class TenantUsage { private final String tenantName; @@ -36,23 +38,6 @@ public class TenantUsage { this.tenantName = tenantName; } - public String getTenantName() { - return tenantName; - } - - public long getTargets() { - return targets; - } - - public TenantUsage setTargets(final long targets) { - this.targets = targets; - return this; - } - - public long getArtifacts() { - return artifacts; - } - public Map getUsageData() { return Collections.unmodifiableMap(getLazyUsageData()); } @@ -64,29 +49,6 @@ public class TenantUsage { return usageData; } - public TenantUsage setArtifacts(final long artifacts) { - this.artifacts = artifacts; - return this; - } - - public long getOverallArtifactVolumeInBytes() { - return overallArtifactVolumeInBytes; - } - - public TenantUsage setOverallArtifactVolumeInBytes(final long overallArtifactVolumeInBytes) { - this.overallArtifactVolumeInBytes = overallArtifactVolumeInBytes; - return this; - } - - public long getActions() { - return actions; - } - - public TenantUsage setActions(final long actions) { - this.actions = actions; - return this; - } - /** * Add a key and value as usage data to the system usage stats. * @@ -100,66 +62,4 @@ public class TenantUsage { getLazyUsageData().put(key, value); return this; } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (int) (actions ^ (actions >>> 32)); - result = prime * result + (int) (artifacts ^ (artifacts >>> 32)); - result = prime * result + (int) (overallArtifactVolumeInBytes ^ (overallArtifactVolumeInBytes >>> 32)); - result = prime * result + (int) (targets ^ (targets >>> 32)); - result = prime * result + ((tenantName == null) ? 0 : tenantName.hashCode()); - result = prime * result + ((usageData == null) ? 0 : usageData.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final TenantUsage other = (TenantUsage) obj; - if (actions != other.actions) { - return false; - } - if (artifacts != other.artifacts) { - return false; - } - if (overallArtifactVolumeInBytes != other.overallArtifactVolumeInBytes) { - return false; - } - if (targets != other.targets) { - return false; - } - if (tenantName == null) { - if (other.tenantName != null) { - return false; - } - } else if (!tenantName.equals(other.tenantName)) { - return false; - } - if (usageData == null) { - if (other.usageData != null) { - return false; - } - } else if (!usageData.equals(other.usageData)) { - return false; - } - return true; - } - - @Override - public String toString() { - return "TenantUsage [tenantName=" + tenantName + ", targets=" + targets + ", artifacts=" + artifacts - + ", actions=" + actions + ", overallArtifactVolumeInBytes=" + overallArtifactVolumeInBytes - + ", usageData=" + usageData + "]"; - } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/tenancy/configuration/TenantConfigurationProperties.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/tenancy/configuration/TenantConfigurationProperties.java index 7f49a9c27..68aebd813 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/tenancy/configuration/TenantConfigurationProperties.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/tenancy/configuration/TenantConfigurationProperties.java @@ -221,6 +221,5 @@ public class TenantConfigurationProperties { context.getAutowireCapableBeanFactory().destroyBean(createdBean); } } - } -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationBooleanValidator.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationBooleanValidator.java index 962f23efe..cbbf435bd 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationBooleanValidator.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/tenancy/configuration/validator/TenantConfigurationBooleanValidator.java @@ -19,5 +19,4 @@ public class TenantConfigurationBooleanValidator implements TenantConfigurationV public Class validateToClass() { return Boolean.class; } - -} +} \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/repository/builder/AbstractTargetUpdateCreate.java b/hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/repository/builder/AbstractTargetUpdateCreate.java index d84e72473..f8d270076 100644 --- a/hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/repository/builder/AbstractTargetUpdateCreate.java +++ b/hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/repository/builder/AbstractTargetUpdateCreate.java @@ -11,6 +11,8 @@ package org.eclipse.hawkbit.repository.builder; import java.net.URI; import java.util.Optional; + +import lombok.ToString; import org.eclipse.hawkbit.repository.ValidString; import org.eclipse.hawkbit.repository.exception.InvalidTargetAddressException; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; @@ -28,6 +30,7 @@ public class AbstractTargetUpdateCreate extends AbstractNamedEntityBuilder protected String address; + @ToString.Exclude @ValidString protected String securityToken; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetFilterQueryManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetFilterQueryManagement.java index 6fc45d597..f6edea2e5 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetFilterQueryManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaTargetFilterQueryManagement.java @@ -290,8 +290,8 @@ public class JpaTargetFilterQueryManagement implements TargetFilterQueryManageme targetFilterQuery.setAutoAssignWeight( update.getWeight() == null ? repositoryProperties.getActionWeightIfAbsent() : update.getWeight()); final boolean confirmationRequired = - update.isConfirmationRequired() == null ? - isConfirmationFlowEnabled() : update.isConfirmationRequired(); + update.getConfirmationRequired() == null ? + isConfirmationFlowEnabled() : update.getConfirmationRequired(); targetFilterQuery.setConfirmationRequired(confirmationRequired); } return targetFilterQueryRepository.save(targetFilterQuery); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SystemManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SystemManagementTest.java index 8d05ba0ac..2f68538f1 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SystemManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/SystemManagementTest.java @@ -69,9 +69,15 @@ public class SystemManagementTest extends AbstractJpaIntegrationTest { // per tenant data final List tenants = systemManagement.getSystemUsageStatisticsWithTenants().getTenants(); assertThat(tenants).hasSize(3); + final TenantUsage tenantUsage0 = new TenantUsage("tenant0"); + tenantUsage0.setArtifacts(1); + tenantUsage0.setOverallArtifactVolumeInBytes(1234); + final TenantUsage tenantUsage1 = new TenantUsage("tenant1"); + tenantUsage1.setArtifacts(1); + tenantUsage1.setOverallArtifactVolumeInBytes(1234); assertThat(tenants).containsOnly(new TenantUsage("default"), - new TenantUsage("tenant0").setArtifacts(1).setOverallArtifactVolumeInBytes(1234), - new TenantUsage("tenant1").setArtifacts(1).setOverallArtifactVolumeInBytes(1234)); + tenantUsage0, + tenantUsage1); } @Test @@ -87,9 +93,13 @@ public class SystemManagementTest extends AbstractJpaIntegrationTest { // per tenant data final List tenants = systemManagement.getSystemUsageStatisticsWithTenants().getTenants(); assertThat(tenants).hasSize(3); - assertThat(tenants).containsOnly(new TenantUsage("default"), new TenantUsage("tenant0").setTargets(100), - new TenantUsage("tenant1").setTargets(100)); - + final TenantUsage tenantUsage0 = new TenantUsage("tenant0"); + tenantUsage0.setTargets(100); + final TenantUsage tenantUsage1 = new TenantUsage("tenant1"); + tenantUsage1.setTargets(100); + assertThat(tenants).containsOnly(new TenantUsage("default"), + tenantUsage0, + tenantUsage1); } @Test @@ -104,9 +114,15 @@ public class SystemManagementTest extends AbstractJpaIntegrationTest { // per tenant data final List tenants = systemManagement.getSystemUsageStatisticsWithTenants().getTenants(); assertThat(tenants).hasSize(3); + final TenantUsage tenantUsage0 = new TenantUsage("tenant0"); + tenantUsage0.setTargets(40); + tenantUsage0.setActions(40); + final TenantUsage tenantUsage1 = new TenantUsage("tenant1"); + tenantUsage1.setTargets(20); + tenantUsage1.setActions(40); assertThat(tenants).containsOnly(new TenantUsage("default"), - new TenantUsage("tenant0").setTargets(20).setActions(40), - new TenantUsage("tenant1").setTargets(20).setActions(40)); + tenantUsage0, + tenantUsage1); } private byte[] createTestTenantsForSystemStatistics(final int tenants, final int artifactSize, final int targets, @@ -162,5 +178,4 @@ public class SystemManagementTest extends AbstractJpaIntegrationTest { softwareModuleManagement.delete(module.getId()); }); } - -} +} \ No newline at end of file