001 /*
002 * Copyright 2002-2004 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005 * use this file except in compliance with the License. You may obtain a copy of
006 * 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, WITHOUT
012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013 * License for the specific language governing permissions and limitations under
014 * the License.
015 */
016 package org.springframework.richclient.filechooser;
017
018 import java.io.File;
019 import java.io.IOException;
020
021 import org.springframework.rules.closure.Closure;
022 import org.springframework.rules.constraint.Constraint;
023 import org.springframework.core.io.Resource;
024 import org.springframework.rules.factory.Constraints;
025
026 /**
027 * @author Keith Donald
028 */
029 public class FileChecks {
030 private static FileExists exists = new FileExists();
031
032 private static FileIsFile file = new FileIsFile();
033
034 private static FileIsReadable readable = new FileIsReadable();
035
036 private static FileConverter fileConverter = new FileConverter();
037
038 private FileChecks() {
039
040 }
041
042 public static Constraint readableFileCheck() {
043 Constraints c = Constraints.instance();
044 Constraint checks = c.all(new Constraint[] { exists, file, readable });
045 return c.testResultOf(fileConverter, checks);
046 }
047
048 public static class FileExists implements Constraint {
049 public boolean test(Object argument) {
050 File f = (File)argument;
051 return f != null && f.exists();
052 }
053 }
054
055 public static class FileIsFile implements Constraint {
056 public boolean test(Object argument) {
057 File f = (File)argument;
058 return f != null && !f.isDirectory();
059 }
060 }
061
062 public static class FileIsReadable implements Constraint {
063 public boolean test(Object argument) {
064 File f = (File)argument;
065 return f != null && f.canRead();
066 }
067 }
068
069 public static class FileConverter implements Closure {
070 public Object call(Object argument) {
071 File f;
072 if (argument == null) {
073 return null;
074 }
075 if (argument instanceof File) {
076 return argument;
077 }
078 if (argument instanceof String) {
079 f = new File((String)argument);
080 }
081 else if (argument instanceof Resource) {
082 try {
083 f = ((Resource)argument).getFile();
084 }
085 catch (IOException e) {
086 return null;
087 }
088 }
089 else {
090 f = (File)argument;
091 }
092 return f;
093 }
094 }
095
096 }