001/*
002 * (C) Copyright 2014 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 *
016 * Contributors:
017 *     bstefanescu
018 *     Anahide Tchertchian
019 */
020package org.nuxeo.targetplatforms.api.impl;
021
022import java.util.ArrayList;
023import java.util.Collections;
024import java.util.LinkedHashMap;
025import java.util.List;
026import java.util.Map;
027
028import org.nuxeo.targetplatforms.api.TargetPackageInfo;
029import org.nuxeo.targetplatforms.api.TargetPlatformInfo;
030
031/**
032 * Describe a target platform: name, version
033 *
034 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a>
035 * @since 5.7.1
036 */
037public class TargetPlatformInfoImpl extends TargetInfoImpl implements TargetPlatformInfo {
038
039    private static final long serialVersionUID = 1L;
040
041    protected Map<String, TargetPackageInfo> availablePackagesInfo;
042
043    // needed by GWT serialization
044    protected TargetPlatformInfoImpl() {
045    }
046
047    public TargetPlatformInfoImpl(String id, String name, String version, String refVersion, String label) {
048        super(id, name, version, refVersion, label);
049    }
050
051    @Override
052    public List<String> getAvailablePackagesIds() {
053        if (availablePackagesInfo == null) {
054            return Collections.emptyList();
055        }
056        return new ArrayList<>(availablePackagesInfo.keySet());
057    }
058
059    @Override
060    public Map<String, TargetPackageInfo> getAvailablePackagesInfo() {
061        // dereference
062        if (availablePackagesInfo == null) {
063            return Collections.<String, TargetPackageInfo> emptyMap();
064        }
065        return new LinkedHashMap<>(availablePackagesInfo);
066    }
067
068    @Override
069    public void addAvailablePackageInfo(TargetPackageInfo packInfo) {
070        if (packInfo == null) {
071            return;
072        }
073        if (availablePackagesInfo == null) {
074            availablePackagesInfo = new LinkedHashMap<>();
075        }
076        availablePackagesInfo.put(packInfo.getId(), packInfo);
077    }
078
079    @Override
080    public void setAvailablePackagesInfo(Map<String, TargetPackageInfo> packages) {
081        if (availablePackagesInfo != null) {
082            availablePackagesInfo.clear();
083        }
084        if (packages != null) {
085            for (TargetPackageInfo packInfo : packages.values()) {
086                addAvailablePackageInfo(packInfo);
087            }
088        }
089    }
090
091    @Override
092    public int compareTo(TargetPlatformInfo o) {
093        // compare first on name, then on version
094        int comp = getName().compareTo(o.getName());
095        if (comp == 0) {
096            comp = getVersion().compareTo(o.getVersion());
097        }
098        return comp;
099    }
100
101}