1 /*
   2  * Copyright (c) 2012, 2014, Oracle and/or its affiliates.
   3  * All rights reserved. Use is subject to license terms.
   4  *
   5  * This file is available and licensed under the following license:
   6  *
   7  * Redistribution and use in source and binary forms, with or without
   8  * modification, are permitted provided that the following conditions
   9  * are met:
  10  *
  11  *  - Redistributions of source code must retain the above copyright
  12  *    notice, this list of conditions and the following disclaimer.
  13  *  - Redistributions in binary form must reproduce the above copyright
  14  *    notice, this list of conditions and the following disclaimer in
  15  *    the documentation and/or other materials provided with the distribution.
  16  *  - Neither the name of Oracle Corporation nor the names of its
  17  *    contributors may be used to endorse or promote products derived
  18  *    from this software without specific prior written permission.
  19  *
  20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31  */
  32 package com.oracle.javafx.scenebuilder.kit.fxom.glue;
  33 
  34 import java.util.Objects;
  35 
  36 /**
  37  *
  38  *
  39  */
  40 class QualifiedName implements Comparable<QualifiedName> {
  41 
  42     private final String qualifier;
  43     private final String name;
  44 
  45     public QualifiedName(String qualifier, String name) {
  46         assert name != null;
  47         this.qualifier = qualifier;
  48         this.name = name;
  49     }
  50 
  51     public QualifiedName(String qualifiedName) {
  52         final int dotIndex = qualifiedName.indexOf('.');
  53         if (dotIndex == -1) {
  54             this.qualifier = null;
  55             this.name = qualifiedName;
  56         } else {
  57             this.qualifier = qualifiedName.substring(0, dotIndex);
  58             this.name = qualifiedName.substring(dotIndex+1);
  59         }
  60     }
  61 
  62     public String getQualifier() {
  63         return qualifier;
  64     }
  65 
  66     public String getName() {
  67         return name;
  68     }
  69 
  70     /*
  71      * Object
  72      */
  73 
  74     @Override
  75     public int hashCode() {
  76         int hash = 7;
  77         hash = 71 * hash + Objects.hashCode(this.qualifier);
  78         hash = 71 * hash + Objects.hashCode(this.name);
  79         return hash;
  80     }
  81 
  82     @Override
  83     public boolean equals(Object obj) {
  84         if (obj == null) {
  85             return false;
  86         }
  87         if (getClass() != obj.getClass()) {
  88             return false;
  89         }
  90         final QualifiedName other = (QualifiedName) obj;
  91         if (!Objects.equals(this.qualifier, other.qualifier)) {
  92             return false;
  93         }
  94         if (!Objects.equals(this.name, other.name)) {
  95             return false;
  96         }
  97         return true;
  98     }
  99 
 100     /*
 101      * Comparable
 102      */
 103 
 104     @Override
 105     public int compareTo(QualifiedName o) {
 106         int result;
 107 
 108         if (this == o) {
 109             result = 0;
 110         } else if (o == null) {
 111             result = -1;
 112         } else {
 113             if ((this.qualifier == null) && (o.qualifier == null)) {
 114                 result = 0;
 115             } else if (this.qualifier == null) {
 116                 result = -1;
 117             } else if (o.qualifier == null) {
 118                 result = +1;
 119             } else {
 120                 result = this.qualifier.compareTo(o.qualifier);
 121             }
 122             if (result == 0) {
 123                 assert this.name != null;
 124                 assert o.name != null;
 125                 result = this.name.compareTo(o.name);
 126             }
 127         }
 128 
 129         return result;
 130     }
 131 
 132 
 133 }