/* * Copyright 2014 Yaroslav Mytkalyk * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.docd.purefm.file; import java.io.Serializable; public final class Permissions implements Serializable { private static final long serialVersionUID = 2682238088276963741L; public final boolean ur; public final boolean uw; public final boolean ux; public final boolean gr; public final boolean gw; public final boolean gx; public final boolean or; public final boolean ow; public final boolean ox; private final String output; public Permissions(boolean r, boolean w, boolean x) { this.ur = r; this.uw = w; this.ux = x; this.gr = false; this.gw = false; this.gx = false; this.or = false; this.ow = false; this.ox = false; @SuppressWarnings("StringBufferReplaceableByString") final StringBuilder sb = new StringBuilder(); sb.append(ur ? 'r' : '-'); sb.append(uw ? 'w' : '-'); sb.append(ux ? 'x' : '-'); this.output = sb.toString(); } public Permissions( boolean ur, boolean uw, boolean ux, boolean gr, boolean gw, boolean gx, boolean or, boolean ow, boolean ox) { this.ur = ur; this.uw = uw; this.ux = ux; this.gr = gr; this.gw = gw; this.gx = gx; this.or = or; this.ow = ow; this.ox = ox; @SuppressWarnings("StringBufferReplaceableByString") final StringBuilder sb = new StringBuilder(); sb.append(ur ? 'r' : '-'); sb.append(uw ? 'w' : '-'); sb.append(ux ? 'x' : '-'); sb.append(gr ? 'r' : '-'); sb.append(gw ? 'w' : '-'); sb.append(gx ? 'x' : '-'); sb.append(or ? 'r' : '-'); sb.append(ow ? 'w' : '-'); sb.append(ox ? 'x' : '-'); this.output = sb.toString(); } public Permissions(String line) { if (line.length() != 10) { throw new IllegalArgumentException("Bad permission line"); } this.ur = line.charAt(1) == 'r'; this.uw = line.charAt(2) == 'w'; this.ux = line.charAt(3) == 'x'; this.gr = line.charAt(4) == 'r'; this.gw = line.charAt(5) == 'w'; this.gx = line.charAt(6) == 'x'; this.or = line.charAt(7) == 'r'; this.ow = line.charAt(8) == 'w'; this.ox = line.charAt(9) == 'x'; @SuppressWarnings("StringBufferReplaceableByString") final StringBuilder sb = new StringBuilder(); sb.append(ur ? 'r' : '-'); sb.append(uw ? 'w' : '-'); sb.append(ux ? 'x' : '-'); sb.append(gr ? 'r' : '-'); sb.append(gw ? 'w' : '-'); sb.append(gx ? 'x' : '-'); sb.append(or ? 'r' : '-'); sb.append(ow ? 'w' : '-'); sb.append(ox ? 'x' : '-'); this.output = sb.toString(); } @Override public String toString() { return this.output; } @Override public boolean equals(Object o) { if (!(o instanceof Permissions)) { return false; } final Permissions p = (Permissions) o; return this.ur == p.ur && this.uw == p.uw && this.ux == p.ux && this.gr == p.gr && this.gw == p.gw && this.gx == p.gx && this.or == p.or && this.ow == p.ow && this.ox == p.ox; } @Override public int hashCode() { int result = (ur ? 1 : 0); result = 31 * result + (uw ? 1 : 0); result = 31 * result + (ux ? 1 : 0); result = 31 * result + (gr ? 1 : 0); result = 31 * result + (gw ? 1 : 0); result = 31 * result + (gx ? 1 : 0); result = 31 * result + (or ? 1 : 0); result = 31 * result + (ow ? 1 : 0); result = 31 * result + (ox ? 1 : 0); return result; } }