whitespace

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1716034 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Javen O'Neal 2015-11-24 05:51:54 +00:00
parent cd254f2f1e
commit 2fab3547be

View File

@ -50,239 +50,224 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.TableDocument;
*/ */
public class XSSFTable extends POIXMLDocumentPart { public class XSSFTable extends POIXMLDocumentPart {
private CTTable ctTable; private CTTable ctTable;
private List<XSSFXmlColumnPr> xmlColumnPr; private List<XSSFXmlColumnPr> xmlColumnPr;
private CellReference startCellReference; private CellReference startCellReference;
private CellReference endCellReference; private CellReference endCellReference;
private String commonXPath; private String commonXPath;
public XSSFTable() {
super();
ctTable = CTTable.Factory.newInstance();
}
public XSSFTable(PackagePart part, PackageRelationship rel) public XSSFTable() {
throws IOException { super();
super(part, rel); ctTable = CTTable.Factory.newInstance();
readFrom(part.getInputStream()); }
}
public void readFrom(InputStream is) throws IOException { public XSSFTable(PackagePart part, PackageRelationship rel)
try { throws IOException {
TableDocument doc = TableDocument.Factory.parse(is, DEFAULT_XML_OPTIONS); super(part, rel);
ctTable = doc.getTable(); readFrom(part.getInputStream());
} catch (XmlException e) { }
throw new IOException(e.getLocalizedMessage());
}
}
public XSSFSheet getXSSFSheet(){
return (XSSFSheet) getParent();
}
public void writeTo(OutputStream out) throws IOException { public void readFrom(InputStream is) throws IOException {
try {
TableDocument doc = TableDocument.Factory.parse(is, DEFAULT_XML_OPTIONS);
ctTable = doc.getTable();
} catch (XmlException e) {
throw new IOException(e.getLocalizedMessage());
}
}
public XSSFSheet getXSSFSheet(){
return (XSSFSheet) getParent();
}
public void writeTo(OutputStream out) throws IOException {
updateHeaders(); updateHeaders();
TableDocument doc = TableDocument.Factory.newInstance(); TableDocument doc = TableDocument.Factory.newInstance();
doc.setTable(ctTable); doc.setTable(ctTable);
doc.save(out, DEFAULT_XML_OPTIONS); doc.save(out, DEFAULT_XML_OPTIONS);
} }
@Override @Override
protected void commit() throws IOException { protected void commit() throws IOException {
PackagePart part = getPackagePart(); PackagePart part = getPackagePart();
OutputStream out = part.getOutputStream(); OutputStream out = part.getOutputStream();
writeTo(out); writeTo(out);
out.close(); out.close();
} }
public CTTable getCTTable(){ public CTTable getCTTable(){
return ctTable; return ctTable;
} }
/** /**
* Checks if this Table element contains even a single mapping to the map identified by id * Checks if this Table element contains even a single mapping to the map identified by id
* @param id the XSSFMap ID * @param id the XSSFMap ID
* @return true if the Table element contain mappings * @return true if the Table element contain mappings
*/ */
public boolean mapsTo(long id){ public boolean mapsTo(long id){
boolean maps =false; boolean maps =false;
List<XSSFXmlColumnPr> pointers = getXmlColumnPrs(); List<XSSFXmlColumnPr> pointers = getXmlColumnPrs();
for(XSSFXmlColumnPr pointer: pointers){ for (XSSFXmlColumnPr pointer: pointers) {
if(pointer.getMapId()==id){ if (pointer.getMapId()==id) {
maps=true; maps=true;
break; break;
} }
} }
return maps; return maps;
} }
/** /**
* *
* Calculates the xpath of the root element for the table. This will be the common part * Calculates the xpath of the root element for the table. This will be the common part
* of all the mapping's xpaths * of all the mapping's xpaths
* *
* @return the xpath of the table's root element * @return the xpath of the table's root element
*/ */
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public String getCommonXpath() { public String getCommonXpath() {
if (commonXPath == null) {
if(commonXPath == null){ String[] commonTokens = {};
for (CTTableColumn column :ctTable.getTableColumns().getTableColumnArray()) {
String[] commonTokens ={}; if (column.getXmlColumnPr()!=null) {
String xpath = column.getXmlColumnPr().getXpath();
for(CTTableColumn column :ctTable.getTableColumns().getTableColumnArray()){ String[] tokens = xpath.split("/");
if(column.getXmlColumnPr()!=null){ if (commonTokens.length==0) {
String xpath = column.getXmlColumnPr().getXpath(); commonTokens = tokens;
String[] tokens = xpath.split("/");
if(commonTokens.length==0){ } else {
commonTokens = tokens; int maxLenght = commonTokens.length>tokens.length? tokens.length:commonTokens.length;
for (int i =0; i<maxLenght;i++) {
}else{ if (!commonTokens[i].equals(tokens[i])) {
int maxLenght = commonTokens.length>tokens.length? tokens.length:commonTokens.length; List<String> subCommonTokens = Arrays.asList(commonTokens).subList(0, i);
for(int i =0; i<maxLenght;i++){
if(!commonTokens[i].equals(tokens[i])){ String[] container = {};
List<String> subCommonTokens = Arrays.asList(commonTokens).subList(0, i);
commonTokens = subCommonTokens.toArray(container);
String[] container = {}; break;
}
commonTokens = subCommonTokens.toArray(container); }
break; }
}
}
}
}
}
commonXPath ="";
for(int i = 1 ; i< commonTokens.length;i++){
commonXPath +="/"+commonTokens[i];
}
}
return commonXPath;
}
@SuppressWarnings("deprecation")
public List<XSSFXmlColumnPr> getXmlColumnPrs() {
if(xmlColumnPr==null){
xmlColumnPr = new ArrayList<XSSFXmlColumnPr>();
for (CTTableColumn column:ctTable.getTableColumns().getTableColumnArray()){
if (column.getXmlColumnPr()!=null){
XSSFXmlColumnPr columnPr = new XSSFXmlColumnPr(this,column,column.getXmlColumnPr());
xmlColumnPr.add(columnPr);
}
}
}
return xmlColumnPr;
}
/**
* @return the name of the Table, if set
*/
public String getName() {
return ctTable.getName();
}
/**
* Changes the name of the Table
*/
public void setName(String name) {
if(name == null) {
ctTable.unsetName();
return;
}
ctTable.setName(name);
}
/**
* @return the display name of the Table, if set
*/
public String getDisplayName() {
return ctTable.getDisplayName();
}
/**
* Changes the display name of the Table
*/
public void setDisplayName(String name) {
ctTable.setDisplayName(name);
}
/**
* @return the number of mapped table columns (see Open Office XML Part 4: chapter 3.5.1.4)
*/
public long getNumerOfMappedColumns(){
return ctTable.getTableColumns().getCount();
}
/**
* @return The reference for the cell in the top-left part of the table
* (see Open Office XML Part 4: chapter 3.5.1.2, attribute ref)
*
*/
public CellReference getStartCellReference() {
if(startCellReference==null){
String ref = ctTable.getRef();
if(ref != null) {
String[] boundaries = ref.split(":");
String from = boundaries[0];
startCellReference = new CellReference(from);
} }
} }
return startCellReference;
} commonXPath = "";
for (int i = 1 ; i< commonTokens.length;i++) {
/** commonXPath +="/"+commonTokens[i];
* @return The reference for the cell in the bottom-right part of the table }
* (see Open Office XML Part 4: chapter 3.5.1.2, attribute ref) }
*
*/ return commonXPath;
public CellReference getEndCellReference() { }
if(endCellReference==null){
@SuppressWarnings("deprecation")
String ref = ctTable.getRef(); public List<XSSFXmlColumnPr> getXmlColumnPrs() {
String[] boundaries = ref.split(":");
String from = boundaries[1]; if (xmlColumnPr==null) {
endCellReference = new CellReference(from); xmlColumnPr = new ArrayList<XSSFXmlColumnPr>();
} for (CTTableColumn column:ctTable.getTableColumns().getTableColumnArray()) {
return endCellReference; if (column.getXmlColumnPr()!=null) {
} XSSFXmlColumnPr columnPr = new XSSFXmlColumnPr(this,column,column.getXmlColumnPr());
xmlColumnPr.add(columnPr);
}
/** }
* @return the total number of rows in the selection. (Note: in this version autofiltering is ignored) }
* return xmlColumnPr;
*/ }
public int getRowCount(){
/**
* @return the name of the Table, if set
CellReference from = getStartCellReference(); */
CellReference to = getEndCellReference(); public String getName() {
return ctTable.getName();
int rowCount = -1; }
if (from!=null && to!=null){
rowCount = to.getRow()-from.getRow(); /**
} * Changes the name of the Table
return rowCount; */
} public void setName(String name) {
if (name == null) {
ctTable.unsetName();
return;
}
ctTable.setName(name);
}
/**
* @return the display name of the Table, if set
*/
public String getDisplayName() {
return ctTable.getDisplayName();
}
/**
* Changes the display name of the Table
*/
public void setDisplayName(String name) {
ctTable.setDisplayName(name);
}
/**
* @return the number of mapped table columns (see Open Office XML Part 4: chapter 3.5.1.4)
*/
public long getNumerOfMappedColumns() {
return ctTable.getTableColumns().getCount();
}
/**
* @return The reference for the cell in the top-left part of the table
* (see Open Office XML Part 4: chapter 3.5.1.2, attribute ref)
*
*/
public CellReference getStartCellReference() {
if (startCellReference==null) {
String ref = ctTable.getRef();
if (ref != null) {
String[] boundaries = ref.split(":");
String from = boundaries[0];
startCellReference = new CellReference(from);
}
}
return startCellReference;
}
/**
* @return The reference for the cell in the bottom-right part of the table
* (see Open Office XML Part 4: chapter 3.5.1.2, attribute ref)
*
*/
public CellReference getEndCellReference() {
if (endCellReference==null) {
String ref = ctTable.getRef();
String[] boundaries = ref.split(":");
String from = boundaries[1];
endCellReference = new CellReference(from);
}
return endCellReference;
}
/**
* @return the total number of rows in the selection. (Note: in this version autofiltering is ignored)
*
*/
public int getRowCount() {
CellReference from = getStartCellReference();
CellReference to = getEndCellReference();
int rowCount = -1;
if (from!=null && to!=null) {
rowCount = to.getRow()-from.getRow();
}
return rowCount;
}
/** /**
* Synchronize table headers with cell values in the parent sheet. * Synchronize table headers with cell values in the parent sheet.