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}