/*
* Copyright 2011 Future Systems
*
* 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 org.krakenapps.pkg;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.krakenapps.api.PackageIndex;
import org.krakenapps.api.PackageMetadata;
import org.krakenapps.api.PackageRepository;
import org.krakenapps.api.PackageVersionHistory;
import org.krakenapps.api.Version;
public class PackageIndexParser {
private PackageIndexParser() {
}
@SuppressWarnings("unchecked")
public static PackageIndex parse(PackageRepository repo, byte[] doc) throws IOException, ClassNotFoundException {
PackageIndex pl = new PackageIndex();
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(doc));
pl.setDescription((String) ois.readObject());
List<Map<String, Object>> objs = (List<Map<String, Object>>) ois.readObject();
pl.setCreated((Date) ois.readObject());
ois.close();
List<PackageMetadata> packages = new ArrayList<PackageMetadata>();
for (Map<String, Object> obj : objs) {
PackageMetadata pm = new PackageMetadata();
pm.setRepository(repo);
pm.setName((String) obj.get("name"));
pm.setDescription((String) obj.get("description"));
pm.setMavenRepositories((Set<String>) obj.get("maven_repositories"));
List<PackageVersionHistory> versions = new ArrayList<PackageVersionHistory>();
List<Map<String, Object>> v = (List<Map<String, Object>>) obj.get("versions");
for (Map<String, Object> m : v) {
Version version = new Version((String) m.get("version"));
Date lastUpdated = (Date) m.get("last_updated");
versions.add(new PackageVersionHistory(version, lastUpdated));
}
pm.setVersions(versions);
packages.add(pm);
}
pl.setPackages(packages);
pl.setRepository(repo);
return pl;
}
}