package com.thinkbiganalytics.metadata.modeshape.template; /*- * #%L * thinkbig-metadata-modeshape * %% * Copyright (C) 2017 ThinkBig Analytics * %% * 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 java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Set; import javax.jcr.Node; import javax.jcr.RepositoryException; import com.thinkbiganalytics.metadata.api.feed.Feed; import com.thinkbiganalytics.metadata.api.feed.security.FeedOpsAccessControlProvider; import com.thinkbiganalytics.metadata.api.template.FeedManagerTemplate; import com.thinkbiganalytics.metadata.modeshape.MetadataRepositoryException; import com.thinkbiganalytics.metadata.modeshape.common.AbstractJcrAuditableSystemEntity; import com.thinkbiganalytics.metadata.modeshape.common.JcrEntity; import com.thinkbiganalytics.metadata.modeshape.feed.JcrFeed; import com.thinkbiganalytics.metadata.modeshape.security.action.JcrAllowedActions; import com.thinkbiganalytics.metadata.modeshape.security.mixin.AccessControlledMixin; import com.thinkbiganalytics.metadata.modeshape.support.JcrPropertyUtil; import com.thinkbiganalytics.metadata.modeshape.template.security.JcrTemplateAllowedActions; /** */ public class JcrFeedTemplate extends AbstractJcrAuditableSystemEntity implements FeedManagerTemplate, AccessControlledMixin { public static String NODE_TYPE = "tba:feedTemplate"; public static String STATE = "tba:state"; public static String DEFINE_TABLE = "tba:defineTable"; public static String DATA_TRANSFORMATION = "tba:dataTransformation"; public static String ALLOW_PRECONDITIONS = "tba:allowPreconditions"; public static String ICON = "tba:icon"; public static String ICON_COLOR = "tba:iconColor"; public static String NIFI_TEMPLATE_ID = "tba:nifiTemplateId"; public static String FEEDS = "tba:feeds"; public static String ORDER = "tba:order"; public static String JSON = "tba:json"; public static String IS_STREAM = "tba:isStream"; public JcrFeedTemplate(Node node) { super(node); } @Override public FeedTemplateId getId() { try { return new JcrFeedTemplate.FeedTemplateId(this.node.getIdentifier()); } catch (RepositoryException e) { throw new MetadataRepositoryException("Failed to retrieve the entity id", e); } } @Override public String getName() { return getTitle(); } @Override public void setName(String name) { setTitle(name); } @Override public String getNifiTemplateId() { return getProperty(NIFI_TEMPLATE_ID, String.class); } @Override public void setNifiTemplateId(String nifiTemplateId) { setProperty(NIFI_TEMPLATE_ID, nifiTemplateId); } @Override public boolean isDefineTable() { return getProperty(DEFINE_TABLE, Boolean.class); } @Override public void setDefineTable(boolean defineTable) { setProperty(DEFINE_TABLE, defineTable); } @Override public boolean isDataTransformation() { return getProperty(DATA_TRANSFORMATION, Boolean.class); } @Override public void setDataTransformation(boolean dataTransformation) { setProperty(DATA_TRANSFORMATION, dataTransformation); } @Override public boolean isAllowPreconditions() { return getProperty(ALLOW_PRECONDITIONS, Boolean.class); } @Override public void setAllowPreconditions(boolean allowedPreconditions) { setProperty(ALLOW_PRECONDITIONS, allowedPreconditions); } @Override public String getIcon() { return getProperty(ICON, String.class); } @Override public void setIcon(String icon) { setProperty(ICON, icon); } @Override public String getIconColor() { return getProperty(ICON_COLOR, String.class); } @Override public void setIconColor(String iconColor) { setProperty(ICON_COLOR, iconColor); } @Override public String getJson() { return getProperty(JSON, String.class); } @Override public void setJson(String json) { setProperty(JSON, json); } public State getState() { return getProperty(STATE, FeedManagerTemplate.State.ENABLED); } @Override public void setState(State state) { setProperty(STATE, state); } public boolean isEnabled() { return State.ENABLED.equals(getState()); } public void enable() { setProperty(STATE, FeedManagerTemplate.State.ENABLED); } public void disable() { setProperty(STATE, State.DISABLED); } public List<Feed> getFeeds() { List<Feed> feeds = new ArrayList<>(); Set<Node> feedNodes = JcrPropertyUtil.getSetProperty(this.node, FEEDS); for (Node depNode : feedNodes) { // TODO: note that feeds instances returned here will not be able to update feed ops // access through permission changes to their allowed actions. feeds.add(new JcrFeed(depNode, (FeedOpsAccessControlProvider) null)); } return feeds; } public boolean addFeed(Feed feed) { JcrFeed jcrFeed = (JcrFeed) feed; Node feedNode = jcrFeed.getNode(); return JcrPropertyUtil.addToSetProperty(this.node, FEEDS, feedNode); } public boolean removeFeed(Feed feed) { JcrFeed jcrFeed = (JcrFeed) feed; Node feedNode = jcrFeed.getNode(); return JcrPropertyUtil.removeFromSetProperty(this.node, FEEDS, feedNode); } public Long getOrder() { return getProperty(ORDER, Long.class); } public void setOrder(Long order) { setProperty(ORDER, order); } @Override public boolean isStream() { if (!hasProperty(IS_STREAM)) { setStream(false); } return getProperty(IS_STREAM, Boolean.class, true); } @Override public void setStream(boolean isStream) { setProperty(IS_STREAM, isStream); } @Override public Class<? extends JcrAllowedActions> getJcrAllowedActionsType() { return JcrTemplateAllowedActions.class; } public static class FeedTemplateId extends JcrEntity.EntityId implements FeedManagerTemplate.ID { public FeedTemplateId(Serializable ser) { super(ser); } } }