blob: 7202cb643a2ef0eadf94af279fdee4a1f0025c9f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 java.text;
import com.ibm.icu4jni.text.NativeBreakIterator;
/*
* Default implementation of BreakIterator. Wraps com.ibm.icu4jni.text.NativeBreakIterator.
* We need this because BreakIterator.isBoundary and BreakIterator.preceding are non-abstract,
* and we don't have Java implementations of those methods (other than the current ones, which
* forward to the wrapped NativeBreakIterator).
*/
class RuleBasedBreakIterator extends BreakIterator {
/*
* Wrapping constructor.
*/
RuleBasedBreakIterator(NativeBreakIterator iterator) {
super(iterator);
}
/*
* (non-Javadoc)
*
* @see java.text.BreakIterator#current()
*/
@Override
public int current() {
return wrapped.current();
}
/*
* (non-Javadoc)
*
* @see java.text.BreakIterator#first()
*/
@Override
public int first() {
return wrapped.first();
}
/*
* (non-Javadoc)
*
* @see java.text.BreakIterator#following(int)
*/
@Override
public int following(int offset) {
validateOffset(offset);
return wrapped.following(offset);
}
/*
* check the offset, throw exception if it is invalid
*/
private void validateOffset(int offset) {
CharacterIterator it = wrapped.getText();
if (offset < it.getBeginIndex() || offset >= it.getEndIndex()) {
throw new IllegalArgumentException();
}
}
/*
* (non-Javadoc)
*
* @see java.text.BreakIterator#getText()
*/
@Override
public CharacterIterator getText() {
return wrapped.getText();
}
/*
* (non-Javadoc)
*
* @see java.text.BreakIterator#last()
*/
@Override
public int last() {
return wrapped.last();
}
/*
* (non-Javadoc)
*
* @see java.text.BreakIterator#next()
*/
@Override
public int next() {
return wrapped.next();
}
/*
* (non-Javadoc)
*
* @see java.text.BreakIterator#next(int)
*/
@Override
public int next(int n) {
return wrapped.next(n);
}
/*
* (non-Javadoc)
*
* @see java.text.BreakIterator#previous()
*/
@Override
public int previous() {
return wrapped.previous();
}
/*
* (non-Javadoc)
*
* @see java.text.BreakIterator#setText(java.text.CharacterIterator)
*/
@Override
public void setText(CharacterIterator newText) {
// call a method to check if null pointer
newText.current();
wrapped.setText(newText);
}
/*
* (non-Javadoc)
*
* @see java.text.BreakIterator#isBoundary(int)
*/
@Override
public boolean isBoundary(int offset) {
validateOffset(offset);
return wrapped.isBoundary(offset);
}
/*
* (non-Javadoc)
*
* @see java.text.BreakIterator#preceding(int)
*/
@Override
public int preceding(int offset) {
validateOffset(offset);
return wrapped.preceding(offset);
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object o) {
if (!(o instanceof RuleBasedBreakIterator)) {
return false;
}
return wrapped.equals(((RuleBasedBreakIterator) o).wrapped);
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return wrapped.toString();
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return wrapped.hashCode();
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#clone()
*/
@Override
public Object clone() {
RuleBasedBreakIterator cloned = (RuleBasedBreakIterator) super.clone();
cloned.wrapped = (NativeBreakIterator) wrapped.clone();
return cloned;
}
}