@Override
	public void duplicateMultiple(int index, int multiple, TaskMonitor monitor)
			throws UsrException {
		if (isEditingField()) {
			endFieldEditing();
		}

		DataTypeComponent originalComp = getComponent(index);
		if (originalComp == null) {
			throw new IllegalArgumentException("Invalid component index specified");
		}
		DataType dt = originalComp.getDataType();
		int dtcLen = originalComp.getLength();

		checkIsAllowableDataType(dt);

		viewDTM.withTransaction("Duplicate Components", () -> {
			int startIndex = index + 1;
			if (dtcLen > 0 && dt != DataType.DEFAULT && isShowingUndefinedBytes() &&
				!isAtEnd(index)) {
				int endIndex = startIndex + (dtcLen * multiple) - 1;
				if (startIndex < getNumComponents()) {
					deleteComponentRange(startIndex, endIndex, monitor);
				}
			}
			insertComponentMultiple(startIndex, dt, originalComp.getLength(), multiple, monitor);
		});

		// Adjust the selection since we added some components. Select last component added.
		// Ensure that last added component is selected to allow for repeated duplication
		setSelection(new int[] { index + multiple });

		lastNumDuplicates = multiple;
	}
Returns an attribute value for the cell at <I>columnIndex</I>
and <I>rowIndex</I>.

@param	rowIndex	the row whose value is to be looked up
@param	columnIndex 	the column whose value is to be looked up
@return	the value Object at the specified cell
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/StructureEditorModel.java