Package org.nimbustools.auto_config.groupauthz.harness

Source Code of org.nimbustools.auto_config.groupauthz.harness.AddDN

/*
* Copyright 1999-2008 University of Chicago
*
* 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 org.nimbustools.auto_config.groupauthz.harness;

import org.nimbustools.auto_config.UserQuestions;
import org.nimbustools.auto_config.TextFile;
import org.globus.workspace.groupauthz.Group;

import java.text.NumberFormat;
import java.text.DateFormat;
import java.io.File;
import java.util.Calendar;

public class AddDN extends AddDeleteCommon {

    public AddDN(String confPath, String[] args, boolean debug)
            throws Exception {
        super(confPath, args, debug);
    }
   
    protected String dnToAdd() throws Exception {
        return this.dnInQuestion("add");
    }

    public void run() throws Exception {

        final String dn = this.dnToAdd();
       
        System.out.println("Adding '" + dn + "'\n");

        if (this.scanAll(dn, this.getGroups())) {
            if (this.warn(dn)) {
                System.out.println("");
                this.deleteAllInstances(dn, this.getGroups());
                System.out.println("\n---------------------------------------");
            } else {
                throw new Exception("Goodbye!");
            }
        }

        this.add(dn);
    }

    /**
     * @param dn to print
     * @return true if it is OK to proceed
     * @throws Exception exc
     */
    public boolean warn(String dn) throws Exception {
        System.out.println("Already exists in a policy, here's the report:");
        final String[] args = {dn};
        System.out.println("---------------------------------------");
        new Report(this.confPath,
                   args,
                   this.debug).run();
        System.out.println("---------------------------------------");
       
        System.out.println(
                "\nDelete current settings for this DN and then continue " +
                        "as a fresh addition? y/n");
        return new UserQuestions().getUserYesNo();
    }

    protected int getGroupChoice(Group[] groups) throws Exception {
       
        final NumberFormat memberFormat = NumberFormat.getInstance();
        int numgroups = groups.length;
        int digitlen = 0;
        if (numgroups < 10) {
            digitlen = 1;
        } else if (numgroups < 100) {
            digitlen = 2;
        } else {
            digitlen = 3;
        }

        memberFormat.setMinimumIntegerDigits(digitlen);

        String indent = "   ";
        for (int i = 0; i < digitlen; i++) {
            indent = indent + " ";
        }

        int numValid = 0;

        final StringBuffer promptbuf =
                new StringBuffer("\nPick a group to add this DN to:\n");

        for (int i = 0; i < groups.length; i++) {
            final Group group = groups[i];
            if (group != null) {

                numValid++;

                promptbuf.append("\n[")
                         .append(memberFormat.format(i+1))
                         .append("] - Group: '")
                         .append(group.getName())
                         .append("'");
                promptbuf.append("\n");
                promptbuf.append(
                        ReportAll.policyBrief(
                                group.getRights(), indent));
                promptbuf.append("\n");
            }
        }

        if (numValid == 0) {
            throw new Exception("No valid groups, can not add.");
        }

        promptbuf.append("\nChoose a number: ");

        return new UserQuestions().getInt(promptbuf.toString(), 1, numValid);
    }

    protected void addImpl(String dn,
                           Group group) throws Exception {

        String filePath = group.getIdentitiesFilePath();

        if (filePath == null || filePath.trim().length() == 0) {
            throw new Exception("unexpected, filePath is empty or null");
        }

        final File file = new File(filePath);
        if (!file.exists()) {
            throw new Exception(
                    "unexpected, file does not exist: '" + filePath + "'");
        }

        final TextFile textFile = new TextFile(filePath);

        if (!file.canWrite()) {
            throw new Exception(
                    "This file is not writable: '" + filePath + "'");
        }

        textFile.add(dn);
        textFile.writeFile(file);
    }

    public void add(String dn) throws Exception {

        if (dn == null || dn.trim().length() == 0) {
            throw new Exception("DN was not supplied");
        }
       
        final Group[] groups = this.getGroups();
        if (groups == null || groups.length == 0) {
            throw new Exception("No groups exist, can not add.");
        }

        final int choice = this.getGroupChoice(groups);

        try {
            if (groups[choice-1] == null) {
                throw new Exception("Invalid choice.");
            }
        } catch (Throwable t) {
            // out of bounds, etc., if user gets tricky
            throw new Exception("Invalid choice.");
        }

        final Group chosenGroup = groups[choice-1];
        this.addImpl(dn, chosenGroup);

        System.out.println("\nSUCCESS");
        System.out.println("\nAdded DN: '" + dn + "'");
        System.out.println("To group: '" + chosenGroup.getName() + "'");
        System.out.println("\nGroup policies:");
        System.out.println(ReportAll.policyBrief(chosenGroup.getRights(), ""));
        System.out.println(
            "\nAccess list: '" + chosenGroup.getIdentitiesFilePath() + "'\n");

        final DateFormat format = DateFormat.getDateTimeInstance();
        final String time = format.format(Calendar.getInstance().getTime());

        System.out.println("Time: " + time + "\n");
    }
}
TOP

Related Classes of org.nimbustools.auto_config.groupauthz.harness.AddDN

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.