/*
This file is part of Project MAXS.
MAXS and its modules is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
MAXS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with MAXS. If not, see <http://www.gnu.org/licenses/>.
*/
package org.projectmaxs.shared.maintransport;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.projectmaxs.shared.global.util.ParcelUtil;
import android.os.Parcel;
import android.os.Parcelable;
public class TransportInformation implements Parcelable, Comparable<TransportInformation> {
private final String mTransportPackage;
private final String mTransportName;
private final boolean mSupportsStatus;
private final String mTransportOutgoingFiletransferService;
private final List<TransportComponent> mComponents;
public TransportInformation(String transportPackage, String transportName,
boolean supportsStatus, String transportOutgoingFiletransferService,
TransportComponent... components) {
mTransportPackage = transportPackage;
mTransportName = transportName;
mSupportsStatus = supportsStatus;
mTransportOutgoingFiletransferService = transportOutgoingFiletransferService;
mComponents = new ArrayList<TransportComponent>(2);
for (TransportComponent c : components)
mComponents.add(c);
}
@SuppressWarnings("unchecked")
public TransportInformation(Parcel in) {
mTransportPackage = in.readString();
mTransportName = in.readString();
mSupportsStatus = ParcelUtil.readBool(in);
mTransportOutgoingFiletransferService = in.readString();
mComponents = in.readArrayList(getClass().getClassLoader());
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mTransportPackage);
dest.writeString(mTransportName);
ParcelUtil.writeBool(dest, mSupportsStatus);
dest.writeString(mTransportOutgoingFiletransferService);
dest.writeList(mComponents);
}
public String getTransportPackage() {
return mTransportPackage;
}
public String getTransportName() {
return mTransportName;
}
public String getOutgoingFiletransferService() {
return mTransportOutgoingFiletransferService;
}
public boolean supportsStatus() {
return mSupportsStatus;
}
public String toString() {
return "TransportInformation: package=" + mTransportPackage;
}
public List<TransportComponent> getAllBroadcastableComponents() {
List<TransportComponent> res = new LinkedList<TransportComponent>();
for (TransportComponent c : mComponents)
if (c.mFeatureBroadcast) res.add(c);
return res;
}
public static final Creator<TransportInformation> CREATOR = new Creator<TransportInformation>() {
@Override
public TransportInformation createFromParcel(Parcel source) {
return new TransportInformation(source);
}
@Override
public TransportInformation[] newArray(int size) {
return new TransportInformation[size];
}
};
@Override
public int compareTo(TransportInformation another) {
final int nameCompare = this.mTransportName.compareTo(another.mTransportName);
if (nameCompare != 0) return nameCompare;
return this.mTransportPackage.compareTo(another.mTransportPackage);
}
public static class TransportComponent implements Parcelable {
private final String mName;
private final String mIntentAction;
private final boolean mFeatureBroadcast;
/**
*
* @param name
* the name of the component
* @param intentAction
* the intent action to use this component
* @param broadcast
* does this component support broadcast deliveries, that is
* deliveries without a destination
*/
public TransportComponent(String name, String intentAction, boolean broadcast) {
mName = name;
mIntentAction = intentAction;
mFeatureBroadcast = broadcast;
}
private TransportComponent(Parcel in) {
mName = in.readString();
mIntentAction = in.readString();
mFeatureBroadcast = ParcelUtil.readBool(in);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mName);
dest.writeString(mIntentAction);
ParcelUtil.writeBool(dest, mFeatureBroadcast);
}
public static final Creator<TransportComponent> CREATOR = new Creator<TransportComponent>() {
@Override
public TransportComponent createFromParcel(Parcel source) {
return new TransportComponent(source);
}
@Override
public TransportComponent[] newArray(int size) {
return new TransportComponent[size];
}
};
public String getName() {
return mName;
}
public String getIntentAction() {
return mIntentAction;
}
public boolean isBroadcastSupported() {
return mFeatureBroadcast;
}
}
}