/* * Copyright (c) 2008-2012, Hazel Bilisim Ltd. All Rights Reserved. * * 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.hazelcast.config; import com.hazelcast.nio.Address; import com.hazelcast.nio.DataSerializable; import com.hazelcast.util.ByteUtil; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; public class TcpIpConfig implements DataSerializable { private int connectionTimeoutSeconds = 5; private boolean enabled = false; private List<String> members = new ArrayList<String>(); private String requiredMember = null; private final List<Address> addresses = new ArrayList<Address>(); public TcpIpConfig addMember(final String member) { this.members.add(member); return this; } public TcpIpConfig clear() { members.clear(); addresses.clear(); return this; } public TcpIpConfig addAddress(final Address address) { addresses.add(address); return this; } public List<Address> getAddresses() { return addresses; } /** * @return the connectionTimeoutSeconds */ public int getConnectionTimeoutSeconds() { return connectionTimeoutSeconds; } /** * @param connectionTimeoutSeconds the connectionTimeoutSeconds to set */ public TcpIpConfig setConnectionTimeoutSeconds(final int connectionTimeoutSeconds) { this.connectionTimeoutSeconds = connectionTimeoutSeconds; return this; } /** * @return the enabled */ public boolean isEnabled() { return enabled; } /** * @param enabled the enabled to set */ public TcpIpConfig setEnabled(final boolean enabled) { this.enabled = enabled; return this; } /** * @return the lsMembers */ public List<String> getMembers() { return members; } /** * @param members the members to set */ public TcpIpConfig setMembers(final List<String> members) { for (String member : members) { StringTokenizer tokenizer = new StringTokenizer(member, ","); while (tokenizer.hasMoreTokens()) { String s = tokenizer.nextToken(); this.members.add(s.trim()); } } return this; } /** * @return the requiredMember */ public String getRequiredMember() { return requiredMember; } /** * @param requiredMember the requiredMember to set */ public TcpIpConfig setRequiredMember(final String requiredMember) { this.requiredMember = requiredMember; return this; } @Override public String toString() { return "TcpIpConfig [enabled=" + enabled + ", connectionTimeoutSeconds=" + connectionTimeoutSeconds + ", members=" + members + ", requiredMember=" + requiredMember + ", addresses=" + addresses + "]"; } public void writeData(DataOutput out) throws IOException { boolean hasMembers = members != null && !members.isEmpty(); boolean hasAddresses = addresses != null && !addresses.isEmpty(); boolean hasRequiredMember = requiredMember != null; out.writeByte(ByteUtil.toByte(enabled, hasRequiredMember, hasMembers, hasAddresses)); out.writeInt(connectionTimeoutSeconds); if (hasRequiredMember) { out.writeUTF(requiredMember); } if (hasMembers) { out.writeInt(members.size()); for (final String member : members) { out.writeUTF(member); } } if (hasAddresses) { out.writeInt(addresses.size()); for (final Address address : addresses) { address.writeData(out); } } } public void readData(DataInput in) throws IOException { boolean[] b = ByteUtil.fromByte(in.readByte()); enabled = b[0]; boolean hasRequiredMember = b[1]; boolean hasMembers = b[2]; boolean hasAddresses = b[3]; connectionTimeoutSeconds = in.readInt(); if (hasRequiredMember) { requiredMember = in.readUTF(); } if (hasMembers) { int size = in.readInt(); members = new ArrayList<String>(size); for (int i = 0; i < size; i++) { members.add(in.readUTF()); } } if (hasAddresses) { int size = in.readInt(); addresses.clear(); for (int i = 0; i < size; i++) { Address address = new Address(); address.readData(in); addresses.add(address); } } } }