01: /*
02: * IzPack - Copyright 2001-2008 Julien Ponge, All Rights Reserved.
03: *
04: * http://izpack.org/
05: * http://izpack.codehaus.org/
06: *
07: * Copyright 2004 Thorsten Kamann
08: *
09: * Licensed under the Apache License, Version 2.0 (the "License");
10: * you may not use this file except in compliance with the License.
11: * You may obtain a copy of the License at
12: *
13: * http://www.apache.org/licenses/LICENSE-2.0
14: *
15: * Unless required by applicable law or agreed to in writing, software
16: * distributed under the License is distributed on an "AS IS" BASIS,
17: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18: * See the License for the specific language governing permissions and
19: * limitations under the License.
20: */
21:
22: package com.izforge.izpack.util;
23:
24: import java.net.InetAddress;
25: import java.net.ServerSocket;
26:
27: import com.izforge.izpack.panels.ProcessingClient;
28: import com.izforge.izpack.panels.Validator;
29:
30: /**
31: * A validator to check whether a port is available (free) on the localhost.
32: *
33: * This validator can be used for rule input fields in the UserInputPanel to make sure that the port
34: * the user entered is not in use.
35: *
36: * @author thorque
37: */
38: public class PortValidator implements Validator {
39:
40: public boolean validate(ProcessingClient client) {
41: InetAddress inet = null;
42: String host = "localhost";
43: boolean retValue = false;
44: int numfields = client.getNumFields();
45:
46: for (int i = 0; i < numfields; i++) {
47: String value = client.getFieldContents(i);
48:
49: if ((value == null) || (value.length() == 0)) {
50: return false;
51: }
52:
53: try {
54: inet = InetAddress.getByName(host);
55: ServerSocket socket = new ServerSocket(Integer
56: .parseInt(value), 0, inet);
57: retValue = socket.getLocalPort() > 0;
58: if (!retValue) {
59: break;
60: }
61: socket.close();
62: } catch (Exception ex) {
63: retValue = false;
64: }
65: }
66: return retValue;
67: }
68:
69: }
|