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}