/*
* Copyright 2015 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.rf.ide.core.testdata.model.table.setting;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.rf.ide.core.testdata.text.read.recognizer.RobotToken;
import org.rf.ide.core.testdata.text.read.recognizer.RobotTokenType;
public class LibraryImport extends AImported {
private static final long serialVersionUID = 1L;
private final List<RobotToken> arguments = new ArrayList<>();
private LibraryAlias alias = new LibraryAlias(null);
public LibraryImport(final RobotToken libraryDeclaration) {
super(Type.LIBRARY, libraryDeclaration);
}
public LibraryAlias getAlias() {
return alias;
}
public void setAlias(final LibraryAlias alias) {
alias.setParent(this);
this.alias = alias;
}
public LibraryAlias newAlias() {
final RobotToken dec = new RobotToken();
dec.setText(RobotTokenType.SETTING_LIBRARY_ALIAS
.getTheMostCorrectOneRepresentation(getParent().getParent().getParent().getRobotVersion())
.getRepresentation());
final LibraryAlias libAlias = new LibraryAlias(dec);
setAlias(libAlias);
return libAlias;
}
@Override
public List<RobotToken> getArguments() {
return Collections.unmodifiableList(arguments);
}
public void setArguments(final int index, final String argument) {
updateOrCreateTokenInside(arguments, index, argument, RobotTokenType.SETTING_LIBRARY_ARGUMENT);
}
public void setArguments(final int index, final RobotToken argument) {
updateOrCreateTokenInside(arguments, index, argument, RobotTokenType.SETTING_LIBRARY_ARGUMENT);
}
public void addArgument(final String argument) {
final RobotToken rt = new RobotToken();
rt.setText(argument);
addArgument(rt);
}
public void addArgument(final RobotToken argument) {
fixForTheType(argument, RobotTokenType.SETTING_LIBRARY_ARGUMENT);
this.arguments.add(argument);
}
public void removeArgument(final int index) {
this.arguments.remove(index);
}
@Override
public boolean isPresent() {
return true;
}
@Override
public List<RobotToken> getElementTokens() {
final List<RobotToken> tokens = new ArrayList<>();
if (isPresent()) {
tokens.add(getDeclaration());
final RobotToken pathOrName = getPathOrName();
if (pathOrName != null) {
tokens.add(pathOrName);
}
tokens.addAll(getArguments());
tokens.addAll(getAlias().getElementTokens());
tokens.addAll(getComment());
}
return tokens;
}
@Override
public boolean removeElementToken(final int index) {
final int withoutAlias = arguments.size();
final int withAlias = withoutAlias + getAlias().getElementTokens().size();
if (index >= 0) {
if (index < withoutAlias) {
arguments.remove(index);
return true;
} else if (index < withAlias) {
if (index == withoutAlias) {
addArgument(getAlias().getLibraryAlias());
} else {
addArgument(getAlias().getLibraryAliasDeclaration());
}
setAlias(new LibraryAlias(null));
return true;
}
}
return false;
}
}