blob: 48a5eb93112b40c70e0023c4b0daec6b01af8fb2 [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* 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 com.android.repository.impl.meta;
import com.android.annotations.NonNull;
import com.android.repository.api.Dependency;
import com.android.repository.api.LocalPackage;
import com.android.repository.api.RepoPackage;
import com.android.repository.api.Repository;
import java.nio.file.Path;
import javax.xml.bind.annotation.XmlTransient;
/**
* Implementation of {@link LocalPackage} that can be saved and loaded using JAXB.
*/
@XmlTransient
public abstract class LocalPackageImpl extends RepoPackageImpl implements LocalPackage {
@XmlTransient private Path mInstalledPath;
@Override
@NonNull
public Path getLocation() {
return mInstalledPath;
}
@Override
public void setInstalledPath(@NonNull Path path) {
mInstalledPath = path;
}
/**
* Creates a {@link LocalPackageImpl} from an arbitrary {@link RepoPackage}. Useful if you
* have a {@link RepoPackage} of unknown concrete type and want to marshal it using JAXB.
*/
@NonNull
public static LocalPackageImpl create(@NonNull RepoPackage repoPackage) {
if (repoPackage instanceof LocalPackageImpl) {
return (LocalPackageImpl)repoPackage;
}
CommonFactory factory = repoPackage.createFactory();
LocalPackageImpl result = factory.createLocalPackage();
result.setVersion(repoPackage.getVersion());
result.setLicense(repoPackage.getLicense());
result.setPath(repoPackage.getPath());
for (Dependency d : repoPackage.getAllDependencies()) {
Dependency newDep = factory.createDependencyType();
newDep.setPath(d.getPath());
newDep.setMinRevision(d.getMinRevision());
result.addDependency(newDep);
}
result.setObsolete(repoPackage.obsolete());
result.setTypeDetails(repoPackage.getTypeDetails());
result.setDisplayName(repoPackage.getDisplayName());
return result;
}
@NonNull
@Override
public RepoPackageImpl asMarshallable() {
return this;
}
@Override
public void addTo(@NonNull Repository repo) {
repo.setLocalPackage(this);
}
}