Turn ActionableResource into an abstract class
[genius.git] / mdsalutil / mdsalutil-api / src / main / java / org / opendaylight / genius / utils / batching / ActionableResources.java
1 /*
2  * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.genius.utils.batching;
9
10 import static java.util.Objects.requireNonNull;
11
12 import org.eclipse.jdt.annotation.NonNull;
13 import org.opendaylight.yangtools.concepts.Identifier;
14 import org.opendaylight.yangtools.yang.binding.DataObject;
15 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
16
17 /**
18  * Utility class for creating ActionableResource instances.
19  */
20 public final class ActionableResources {
21     private ActionableResources() {
22
23     }
24
25     public static <T extends DataObject> @NonNull ActionableResource<T> create(final InstanceIdentifier<T> path,
26             final T data) {
27         return new ActionableResourceImpl<>(path, ActionableResource.CREATE, requireNonNull(data), null);
28     }
29
30     public static <T extends DataObject> @NonNull ActionableResource<T> create(final Identifier identifier,
31             final InstanceIdentifier<T> path, final T data) {
32         return new ActionableResourceImpl<>(identifier, path, ActionableResource.CREATE, requireNonNull(data), null);
33     }
34
35     public static <T extends DataObject> @NonNull ActionableResource<T> update(final InstanceIdentifier<T> path,
36             final T newData) {
37         return new ActionableResourceImpl<>(path, ActionableResource.UPDATE, requireNonNull(newData), null);
38     }
39
40     public static <T extends DataObject> @NonNull ActionableResource<T> update(final Identifier identifier,
41             final InstanceIdentifier<T> path, final T newData, final T oldData) {
42         return new ActionableResourceImpl<>(identifier, path, ActionableResource.UPDATE, requireNonNull(newData),
43             oldData);
44     }
45
46     public static @NonNull ActionableResource<?> delete(final InstanceIdentifier<?> path) {
47         return new ActionableResourceImpl<>(path, ActionableResource.DELETE, null, null);
48     }
49
50     public static <T extends DataObject> @NonNull ActionableResource<T> delete(final Identifier identifier,
51             final InstanceIdentifier<T> path, final T data) {
52         return new ActionableResourceImpl<>(identifier, path, ActionableResource.DELETE, data, null);
53     }
54
55     public static <T extends DataObject> @NonNull ActionableResource<T> updateContainer(final
56         InstanceIdentifier<T> path, final T newData) {
57         return new ActionableResourceImpl<>(path, ActionableResource.UPDATECONTAINER, requireNonNull(newData),
58                 null);
59     }
60 }