/*
* Copyright © 2014 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.internal.app.store;
import co.cask.cdap.api.app.ApplicationSpecification;
import co.cask.cdap.internal.app.ApplicationSpecificationAdapter;
import co.cask.cdap.internal.io.ReflectionSchemaGenerator;
import com.google.common.base.Objects;
/**
* Holds application metadata
*/
public class ApplicationMeta {
private static final ApplicationSpecificationAdapter ADAPTER =
ApplicationSpecificationAdapter.create(new ReflectionSchemaGenerator());
private final String id;
private final ApplicationSpecification spec;
private final String archiveLocation;
// NOTE: we need lastDeployTs since not all (e.g. persisting app jar) covered with tx,
// and currently we use it resolve some races :(
private final long lastUpdateTs;
public ApplicationMeta(String id, ApplicationSpecification spec, String archiveLocation) {
this.id = id;
this.spec = spec;
this.archiveLocation = archiveLocation;
this.lastUpdateTs = System.currentTimeMillis();
}
public static ApplicationMeta updateSpec(ApplicationMeta original, ApplicationSpecification newSpec) {
return new ApplicationMeta(original.id, newSpec, original.archiveLocation);
}
public String getId() {
return id;
}
public ApplicationSpecification getSpec() {
return spec;
}
public String getArchiveLocation() {
return archiveLocation;
}
public long getLastUpdateTs() {
return lastUpdateTs;
}
@Override
public String toString() {
return Objects.toStringHelper(this)
.add("id", id)
.add("spec", ADAPTER.toJson(spec))
.add("archiveLocation", archiveLocation)
.add("lastUpdateTs", lastUpdateTs)
.toString();
}
}