| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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.apache.felix.configurator.impl.model; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.io.Serializable; |
| import java.util.Dictionary; |
| import java.util.List; |
| |
| public class Config implements Serializable, Comparable<Config> { |
| |
| private static final long serialVersionUID = 1L; |
| |
| /** Serialization version. */ |
| private static final int VERSION = 1; |
| |
| /** The configuration pid */ |
| private String pid; |
| |
| /** The configuration ranking */ |
| private int ranking; |
| |
| /** The bundle id. */ |
| private long bundleId; |
| |
| /** The configuration policy. */ |
| private ConfigPolicy policy; |
| |
| /** The configuration properties. */ |
| private Dictionary<String, Object> properties; |
| |
| /** The index within the list of configurations if several. */ |
| private volatile int index = 0; |
| |
| /** The configuration state. */ |
| private volatile ConfigState state = ConfigState.INSTALL; |
| |
| private volatile List<File> files; |
| |
| public Config(final String pid, |
| final Dictionary<String, Object> properties, |
| final long bundleId, |
| final int ranking, |
| final ConfigPolicy policy) { |
| this.pid = pid; |
| this.ranking = ranking; |
| this.bundleId = bundleId; |
| this.properties = properties; |
| this.policy = policy; |
| } |
| |
| /** |
| * Serialize the object |
| * - write version id |
| * - serialize fields |
| * @param out Object output stream |
| * @throws IOException |
| */ |
| private void writeObject(final java.io.ObjectOutputStream out) |
| throws IOException { |
| out.writeInt(VERSION); |
| out.writeObject(pid); |
| out.writeObject(properties); |
| out.writeObject(policy.name()); |
| out.writeLong(bundleId); |
| out.writeInt(ranking); |
| out.writeInt(index); |
| out.writeObject(state.name()); |
| out.writeObject(files); |
| } |
| |
| /** |
| * Deserialize the object |
| * - read version id |
| * - deserialize fields |
| */ |
| @SuppressWarnings("unchecked") |
| private void readObject(final java.io.ObjectInputStream in) |
| throws IOException, ClassNotFoundException { |
| final int version = in.readInt(); |
| if ( version < 1 || version > VERSION ) { |
| throw new ClassNotFoundException(this.getClass().getName()); |
| } |
| this.pid = (String) in.readObject(); |
| this.properties = (Dictionary<String, Object>) in.readObject(); |
| this.policy = ConfigPolicy.valueOf((String)in.readObject()); |
| this.bundleId = in.readLong(); |
| this.ranking = in.readInt(); |
| this.index = in.readInt(); |
| this.state = ConfigState.valueOf((String)in.readObject()); |
| this.files = (List<File>) in.readObject(); |
| } |
| |
| /** |
| * Get the PID |
| * @return The pid. |
| */ |
| public String getPid() { |
| return this.pid; |
| } |
| |
| /** |
| * The configuration ranking |
| * @return The configuration ranking |
| */ |
| public int getRanking() { |
| return this.ranking; |
| } |
| |
| /** |
| * The bundle id |
| * @return The bundle id |
| */ |
| public long getBundleId() { |
| return this.bundleId; |
| } |
| |
| /** |
| * The index of the configuration. This value is only |
| * relevant if there are several configurations for the |
| * same pid with same ranking and bundle id. |
| * @return The index within the configuration set |
| */ |
| public int getIndex() { |
| return this.index; |
| } |
| |
| /** |
| * Set the index |
| */ |
| public void setIndex(final int value) { |
| this.index = value; |
| } |
| |
| /** |
| * Get the configuration state |
| * @return The state |
| */ |
| public ConfigState getState() { |
| return this.state; |
| } |
| |
| /** |
| * Set the configuration state |
| * @param value The new state |
| */ |
| public void setState(final ConfigState value) { |
| this.state = value; |
| } |
| |
| /** |
| * Get the policy |
| * @return The policy |
| */ |
| public ConfigPolicy getPolicy() { |
| return this.policy; |
| } |
| |
| /** |
| * Get all properties |
| * @return The configuration properties |
| */ |
| public Dictionary<String, Object> getProperties() { |
| return this.properties; |
| } |
| |
| public void setFiles(final List<File> f) { |
| this.files = f; |
| } |
| |
| public List<File> getFiles() { |
| return this.files; |
| } |
| |
| @Override |
| public int compareTo(final Config o) { |
| // sort by ranking, highest first |
| // if same ranking, sort by bundle id, lowest first |
| // if same bundle id, sort by index |
| if ( this.getRanking() > o.getRanking() ) { |
| return -1; |
| } else if ( this.getRanking() == o.getRanking() ) { |
| if ( this.getBundleId() < o.getBundleId() ) { |
| return -1; |
| } else if ( this.getBundleId() == o.getBundleId() ) { |
| return this.getIndex() - o.getIndex(); |
| } |
| } |
| return 1; |
| } |
| |
| @Override |
| public String toString() { |
| return "Config [pid=" + pid |
| + ", ranking=" + ranking |
| + ", bundleId=" + bundleId |
| + ", index=" + index |
| + ", properties=" + properties |
| + ", policy=" + policy |
| + ", state=" + state + "]"; |
| } |
| } |