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