001/* 002 * Copyright 2012-2016 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of 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, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.springframework.boot.devtools.filewatch; 018 019import java.io.File; 020import java.util.Collections; 021import java.util.Iterator; 022import java.util.Set; 023 024/** 025 * A collections of files from a specific source folder that have changed. 026 * 027 * @author Phillip Webb 028 * @since 1.3.0 029 * @see FileChangeListener 030 * @see ChangedFiles 031 */ 032public final class ChangedFiles implements Iterable<ChangedFile> { 033 034 private final File sourceFolder; 035 036 private final Set<ChangedFile> files; 037 038 public ChangedFiles(File sourceFolder, Set<ChangedFile> files) { 039 this.sourceFolder = sourceFolder; 040 this.files = Collections.unmodifiableSet(files); 041 } 042 043 /** 044 * The source folder being watched. 045 * @return the source folder 046 */ 047 public File getSourceFolder() { 048 return this.sourceFolder; 049 } 050 051 @Override 052 public Iterator<ChangedFile> iterator() { 053 return getFiles().iterator(); 054 } 055 056 /** 057 * The files that have been changed. 058 * @return the changed files 059 */ 060 public Set<ChangedFile> getFiles() { 061 return this.files; 062 } 063 064 @Override 065 public int hashCode() { 066 return this.files.hashCode(); 067 } 068 069 @Override 070 public boolean equals(Object obj) { 071 if (obj == null) { 072 return false; 073 } 074 if (obj == this) { 075 return true; 076 } 077 if (obj instanceof ChangedFiles) { 078 ChangedFiles other = (ChangedFiles) obj; 079 return this.sourceFolder.equals(other.sourceFolder) 080 && this.files.equals(other.files); 081 } 082 return super.equals(obj); 083 } 084 085 @Override 086 public String toString() { 087 return this.sourceFolder + " " + this.files; 088 } 089 090}