001// Generated by delombok at Mon Jan 02 16:27:27 UTC 2023 002package io.cui.tools.io; 003 004import java.io.File; 005import java.io.Serializable; 006import java.nio.file.Path; 007import java.util.List; 008import io.cui.tools.string.Splitter; 009 010/** 011 * Helper class for splitting / interacting with Filename and corresponding suffixes. 012 * 013 * @author Oliver Wolff 014 */ 015public class StructuredFilename implements Serializable { 016 private static final long serialVersionUID = 7473756881958645393L; 017 private final String originalName; 018 private final String namePart; 019 private final String suffix; 020 021 // owolff: Although duplicate code for case 0 and case 1 I find 022 // it better readable 023 /** 024 * Constructor. 025 * 026 * @param filename to be checked 027 */ 028 @SuppressWarnings("squid:S1871") 029 public StructuredFilename(final String filename) { 030 originalName = filename; 031 final List<String> list = Splitter.on(".").omitEmptyStrings().splitToList(filename); 032 switch (list.size()) { 033 case 0: 034 namePart = filename; 035 suffix = null; 036 break; 037 case 1: 038 namePart = filename; 039 suffix = null; 040 break; 041 case 2: 042 namePart = list.get(0); 043 suffix = list.get(1); 044 break; 045 default: 046 suffix = list.get(list.size() - 1); 047 namePart = String.join(".", list.subList(0, list.size() - 1)); 048 break; 049 } 050 } 051 052 /** 053 * Constructor 054 * 055 * @param path to be used as source, must not be null 056 */ 057 public StructuredFilename(final Path path) { 058 this(path.getName(path.getNameCount() - 1).toString()); 059 } 060 061 /** 062 * Constructor 063 * 064 * @param file to be used as source, must not be null 065 */ 066 public StructuredFilename(final File file) { 067 this(file.toPath()); 068 } 069 070 /** 071 * @param nameSuffix to be used for appending the name part. may be null 072 * @return the created name string. if namePart = "namePart", nameSuffix=".nameSuffix" and 073 * suffix = "suffix" the resulting String will be "namePart.nameSuffix.suffix" 074 */ 075 public String getAppendedName(final String nameSuffix) { 076 final StringBuilder builder = new StringBuilder(namePart); 077 if (null != nameSuffix) { 078 builder.append(nameSuffix); 079 } 080 if (null != suffix) { 081 builder.append('.'); 082 builder.append(suffix); 083 } 084 return builder.toString(); 085 } 086 087 @java.lang.Override 088 @java.lang.SuppressWarnings("all") 089 @lombok.Generated 090 public boolean equals(final java.lang.Object o) { 091 if (o == this) return true; 092 if (!(o instanceof StructuredFilename)) return false; 093 final StructuredFilename other = (StructuredFilename) o; 094 if (!other.canEqual((java.lang.Object) this)) return false; 095 final java.lang.Object this$originalName = this.getOriginalName(); 096 final java.lang.Object other$originalName = other.getOriginalName(); 097 if (this$originalName == null ? other$originalName != null : !this$originalName.equals(other$originalName)) return false; 098 final java.lang.Object this$namePart = this.getNamePart(); 099 final java.lang.Object other$namePart = other.getNamePart(); 100 if (this$namePart == null ? other$namePart != null : !this$namePart.equals(other$namePart)) return false; 101 final java.lang.Object this$suffix = this.getSuffix(); 102 final java.lang.Object other$suffix = other.getSuffix(); 103 if (this$suffix == null ? other$suffix != null : !this$suffix.equals(other$suffix)) return false; 104 return true; 105 } 106 107 @java.lang.SuppressWarnings("all") 108 @lombok.Generated 109 protected boolean canEqual(final java.lang.Object other) { 110 return other instanceof StructuredFilename; 111 } 112 113 @java.lang.Override 114 @java.lang.SuppressWarnings("all") 115 @lombok.Generated 116 public int hashCode() { 117 final int PRIME = 59; 118 int result = 1; 119 final java.lang.Object $originalName = this.getOriginalName(); 120 result = result * PRIME + ($originalName == null ? 43 : $originalName.hashCode()); 121 final java.lang.Object $namePart = this.getNamePart(); 122 result = result * PRIME + ($namePart == null ? 43 : $namePart.hashCode()); 123 final java.lang.Object $suffix = this.getSuffix(); 124 result = result * PRIME + ($suffix == null ? 43 : $suffix.hashCode()); 125 return result; 126 } 127 128 @java.lang.Override 129 @java.lang.SuppressWarnings("all") 130 @lombok.Generated 131 public java.lang.String toString() { 132 return "StructuredFilename(originalName=" + this.getOriginalName() + ", namePart=" + this.getNamePart() + ", suffix=" + this.getSuffix() + ")"; 133 } 134 135 @java.lang.SuppressWarnings("all") 136 @lombok.Generated 137 public String getOriginalName() { 138 return this.originalName; 139 } 140 141 @java.lang.SuppressWarnings("all") 142 @lombok.Generated 143 public String getNamePart() { 144 return this.namePart; 145 } 146 147 @java.lang.SuppressWarnings("all") 148 @lombok.Generated 149 public String getSuffix() { 150 return this.suffix; 151 } 152}