/*
* Copyright © 2015 Cask Data, Inc.
*
* 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.
*/
package co.cask.cdap.data2.metadata.dataset;
import co.cask.cdap.data2.dataset2.lib.table.MDSKey;
import co.cask.cdap.proto.Id;
import co.cask.cdap.proto.ProgramType;
/**
* Helper methods for keys of {@link MetadataDataset}.
*/
// Note: these methods were refactored from MetadataDataset class. Once CDAP-3657 is fixed, these methods will need
// to be cleaned up CDAP-4291
final class KeyHelper {
static void addTargetIdToKey(MDSKey.Builder builder, Id.NamespacedId namespacedId) {
String type = getTargetType(namespacedId);
if (type.equals(Id.Program.class.getSimpleName())) {
Id.Program program = (Id.Program) namespacedId;
String namespaceId = program.getNamespaceId();
String appId = program.getApplicationId();
String programType = program.getType().name();
String programId = program.getId();
builder.add(namespaceId);
builder.add(appId);
builder.add(programType);
builder.add(programId);
} else if (type.equals(Id.Application.class.getSimpleName())) {
Id.Application application = (Id.Application) namespacedId;
String namespaceId = application.getNamespaceId();
String instanceId = application.getId();
builder.add(namespaceId);
builder.add(instanceId);
} else if (type.equals(Id.DatasetInstance.class.getSimpleName())) {
Id.DatasetInstance datasetInstance = (Id.DatasetInstance) namespacedId;
String namespaceId = datasetInstance.getNamespaceId();
String instanceId = datasetInstance.getId();
builder.add(namespaceId);
builder.add(instanceId);
} else if (type.equals(Id.Stream.class.getSimpleName())) {
Id.Stream stream = (Id.Stream) namespacedId;
String namespaceId = stream.getNamespaceId();
String instanceId = stream.getId();
builder.add(namespaceId);
builder.add(instanceId);
} else if (type.equals(Id.Stream.View.class.getSimpleName())) {
Id.Stream.View view = (Id.Stream.View) namespacedId;
String namespaceId = view.getNamespaceId();
String streamId = view.getStreamId();
String viewId = view.getId();
builder.add(namespaceId);
builder.add(streamId);
builder.add(viewId);
} else if (type.equals(Id.Artifact.class.getSimpleName())) {
Id.Artifact artifactId = (Id.Artifact) namespacedId;
String namespaceId = artifactId.getNamespace().getId();
String name = artifactId.getName();
String version = artifactId.getVersion().getVersion();
builder.add(namespaceId);
builder.add(name);
builder.add(version);
} else {
throw new IllegalArgumentException("Illegal Type " + type + " of metadata source.");
}
}
static Id.NamespacedId getTargetIdIdFromKey(MDSKey.Splitter keySplitter, String type) {
if (type.equals(Id.Program.class.getSimpleName())) {
String namespaceId = keySplitter.getString();
String appId = keySplitter.getString();
String programType = keySplitter.getString();
String programId = keySplitter.getString();
return Id.Program.from(namespaceId, appId, ProgramType.valueOf(programType), programId);
} else if (type.equals(Id.Application.class.getSimpleName())) {
String namespaceId = keySplitter.getString();
String appId = keySplitter.getString();
return Id.Application.from(namespaceId, appId);
} else if (type.equals(Id.Artifact.class.getSimpleName())) {
String namespaceId = keySplitter.getString();
String name = keySplitter.getString();
String version = keySplitter.getString();
return Id.Artifact.from(Id.Namespace.from(namespaceId), name, version);
} else if (type.equals(Id.DatasetInstance.class.getSimpleName())) {
String namespaceId = keySplitter.getString();
String instanceId = keySplitter.getString();
return Id.DatasetInstance.from(namespaceId, instanceId);
} else if (type.equals(Id.Stream.class.getSimpleName())) {
String namespaceId = keySplitter.getString();
String instanceId = keySplitter.getString();
return Id.Stream.from(namespaceId, instanceId);
} else if (type.equals(Id.Stream.View.class.getSimpleName())) {
String namespaceId = keySplitter.getString();
String streamId = keySplitter.getString();
String viewId = keySplitter.getString();
return Id.Stream.View.from(Id.Stream.from(namespaceId, streamId), viewId);
}
throw new IllegalArgumentException("Illegal Type " + type + " of metadata source.");
}
static String getTargetType(Id.NamespacedId namespacedId) {
if (namespacedId instanceof Id.Program) {
return Id.Program.class.getSimpleName();
}
return namespacedId.getClass().getSimpleName();
}
private KeyHelper() {
}
}