text:
.dojoxGrid {
	position: relative;
	background-color: #EBEADB;
	font-family: Geneva, Arial, Helvetica, sans-serif;
	-moz-outline-style: none;
	outline: none;
	overflow: hidden;
	height: 0;
}
.dojoxGrid table {
	padding: 0;
}
.dojoxGrid td {
	-moz-outline: none;
}
.dojoxGridMasterHeader {
	position: relative;
}
.dojoxGridMasterView  {
	position: relative;
}
.dojoxGridMasterMessages {
	position: relative;
	padding: 1em;
	text-align: center;
	background-color: white;
}
.dojoxGridView {
	position: absolute;
	overflow: hidden;
}
.dojoxGridHeader {
	position: absolute;
	overflow: hidden;
	cursor: default;
}
.dojoxGridHeader {
	background-color: #E8E1CF;
}
.dojoxGridHeader table {
	text-align: center;
}
.dojoxGridHeader .dojoxGridCell {
	border: 1px solid;
	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
	background: url(../../../resources/images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
	padding-bottom: 2px;
}
.dojoxGridHeader .dojoxGridCellOver {
	background-image: none;
	background-color: white;
	border-bottom-color: #FEBE47;
	margin-bottom: 0;
	padding-bottom: 0;
	border-bottom-width: 3px;
}
.dojoxGridHeader .dojoxGridCellFocus {
	border: 1px dashed blue;
}
.dojoxGridHeader.dojoxGridCellFocus.dojoxGridCellOver {
	background-image: none;
	background-color: white;
	border-bottom-color: #FEBE47;
	margin-bottom: 0;
	padding-bottom: 0;
	border-bottom-width: 3px;
}
.dojoxGridArrowButtonNode {
	display: none;
	padding-left: 16px;
}
.dojoxGridArrowButtonChar {
	display:inline;
}

.dojoxGridArrowButtonNode:hover {
        cursor: default;
}
.dojoxGridArrowButtonChar:hover {
        cursor: default;
}
.dojoxGridSortUp:hover {
        cursor: default;
}
.dojoxGridSortDown:hover {
        cursor: default;
}
.dijit_a11y .dojoxGridArrowButtonChar {
	display:inline !important;
}
.dojoxGridScrollbox {
	position: relative;
	overflow: auto;
	background-color: white;
	width: 100%;
}
.dojoxGridContent {
	position: relative;
	overflow: hidden;
	 -moz-outline-style: none;
	outline: none;
}
.dojoxGridRowbar {
	border: 1px solid;
	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
	border-top: none;
	background: url(../../../resources/images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
}
.dojoxGridRowbarInner {
	border-top: 1px solid #F6F4EB;
}
.dojoxGridRowbarOver {
	background-image: none;
	background-color: white;
	border-top-color: #FEBE47;
	border-bottom-color: #FEBE47;
}
.dojoxGridRowbarSelected {
	background-color: #D9E8F9;
}
.dojoxGridRow {
	position: relative;
	width: 9000em;
}
.dojoxGridRow {

	border: 1px solid #E8E4D8;
	border-color: #F8F7F1;

	border-left: none;
	border-right: none;
	background-color: white;
	border-top: none;
}
.dojoxGridRowOver {
	border-top-color: #FEBE47;
	border-bottom-color: #FEBE47;

}
.dojoxGridRowOdd {
	background-color: #FFFDF3;

}
.dojoxGridRowSelected {
	background-color: #D9E8F9;
}
.dojoxGridRowTable {
	table-layout: fixed;
	width: 0;
	empty-cells: show;
}
.dj_ie .dojoxGridRowTable {
	border-collapse: collapse;
}
.dojoxGridInvisible {
	visibility: hidden;
}
.Xdojo-ie .dojoxGridInvisible {
	display: none;
}
.dojoxGridInvisible td, .dojoxGridHeader .dojoxGridInvisible td {
	border-top-width: 0;
	border-bottom-width: 0;
	padding-top: 0;
	padding-bottom: 0;
	height: 0;
	overflow: hidden;
}
.dojoxGridCell {
	border: 1px solid;
	border-color: #EBEADB;
	border-right-color: #D5CDB5;
	padding: 3px 3px 3px 3px;
	text-align: left;
	overflow: hidden;
}
.dojoxGridCellFocus {
	border: 1px dashed blue;
}
.dojoxGridCellOver {
	border: 1px dotted #FEBE47;
}
.dojoxGridCellFocus.dojoxGridCellOver {
	border: 1px dashed green;
}
.dojoxGridRowEditing td {
	background-color: #F4FFF4;
}
.dojoxGridRow-inserting td {
	background-color: #F4FFF4;
}
.dojoxGridRow-inflight td {
	background-color: #F2F7B7;
}
.dojoxGridRow-error td {
	background-color: #F8B8B6;
}
.dojoxGridInput, .dojoxGridSelect, .dojoxGridTextarea {
	margin: 0;
	padding: 0;
	border-style: none;
	width: 100%;
	font-size: 100%;
	font-family: inherit;
}
.dojoxGridHiddenFocus {
	position: absolute;
	top: -1000px;
	height: 0;
	width: 0;
}
.dijit_a11y .dojoxGridRowbarSelected {
	border-top: 1px solid white;
	border-bottom: 1px dashed black;
	border-top: 0;
	background: none;
}
.dijit_a11y .dojoxGridRowbarSelected .dojoxGridRowbarInner {
	border: 0;
	border-top: 1px solid white;
}
.dijit_a11y .dojoxGridRowSelected {
	border: 1px solid black !important;
}
.dojoxGridDndAvatar {
	font-size: 100%;
}
.dojoxGrid .dojoDndItemBefore {
	border-left-color: red;
}
.dojoxGrid .dojoDndItemAfter {
	border-right-color: red;
}
.dijit_a11y .dojoDndItemBefore {
	border-left: double;
}
.dijit_a11y .dojoDndItemAfter {
	border-right: double;
}
.dojoxGridDndAvatarItem	td {
	border: 1px solid;
	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
	background: url(../../../resources/images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
	padding: 0pt;
	margin: 0pt;
}
.dojoxGridDndAvatarItem	td.dojoxGridDndAvatarItemImage {
	border: 0;
	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
	background-color: transparent;
	padding: 3px;
	padding-bottom: 2px;
	margin: 0;
}
.dojoDndMove .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
	background-image: url(../../../../../dojo/resources/images/dndNoMove.png);
	background-repeat: no-repeat;
	background-position: center center;
}
.dojoDndCopy .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
	background-image: url(../../../../../dojo/resources/images/dndNoCopy.png);
	background-repeat: no-repeat;
	background-position: center center;
}
.dojoDndMove .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
	background-image: url(../../../../../dojo/resources/images/dndMove.png);
	background-repeat: no-repeat;
	background-position: center center;
}
.dojoDndCopy .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
	background-image: url(../../../../../dojo/resources/images/dndCopy.png);
	background-repeat: no-repeat;
	background-position: center center;
}
.dojoxGridColPlaceBottom {
	background: transparent url(../../../resources/images/grid_sort_up.gif) no-repeat scroll left top;
}
.dojoxGridColPlaceTop {
	background: transparent url(../../../resources/images/grid_sort_down.gif) no-repeat scroll left top;
}
.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
	font-size:1px;
	height:6px;
	z-index:10000;
	top:0;
	overflow:hidden;
	position:absolute;
	line-height:1px;
	width:8px;
}
.dojoxGridResizeColLine {
	width: 1px;
	background-color: #777;
	position: absolute;
	cursor: col-resize;
	z-index:10000;
}
.dojoxGridColNoResize,
.dojoxGridColNoResize .dojoDndItemOver {
	cursor: not-allowed !important;
}
.dojoxGridColResize,
.dojoxGridColResize .dojoDndItemOver,
.dojoxGridColumnResizing,
.dojoxGridColumnResizing .dojoDndItemOver,
.dojoxGridColumnResizing .dojoxGridHeader {
	cursor: col-resize !important;
}
.dojoxGridColPlaceBottom {
	background: transparent url(../../../resources/images/grid_sort_up.gif) no-repeat scroll left top;
}
.dojoxGridColPlaceTop {
	background: transparent url(../../../resources/images/grid_sort_down.gif) no-repeat scroll left top;
}
.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
	font-size:1px;
	height:6px;
	z-index:10000;
	top:0;
	overflow:hidden;
	position:absolute;
	line-height:1px;
	width:8px;
}
.dojoxGridResizeColLine {
	width: 1px;
	background-color: #777;
	position: absolute;
}
.dojoxGridExpandoCell {
	vertical-align: middle;
}
.dojoxGridSummarySpan {
	visibility: hidden;
}
.dojoxGridSummaryRow .dojoxGridSummarySpan,
.dojoxGridRowCollapsed .dojoxGridSummarySpan {
	visibility: visible;
}
.dojoxGridNoChildren .dojoxGridExpando {
	visibility: hidden !important;
	width: 0px !important;
}
.claro .dojoxGrid {
	margin:0px;
	padding:0px;
	border-collapse:collapse;
	background-color:#fff;
}
.claro .dojoxGridMasterMessages {
	background-color: #fefefe;
}
.claro .dojoxGridLoading,
.claro .dojoxGridError {
	background-position:left center;
	background-repeat: no-repeat;
	padding-left:25px;
}
.claro .dojoxGridLoading {
	background-image:url(../../../../../dijit/themes/claro/images/loadingAnimation.gif);
}
.claro .dojoxGridError {
	background-image: url(../../../../../dijit/icons/images/commonIconsObjActEnabled.png);
	background-position: -496px;
	width: 16px;
	height: 16px;
}
.claro .dojoxGridHeader {
	background-color:#FFF;
}
.claro .dojoxGridHeader .dojoxGridCell {
	background:url(../../../resources/images/header.png) #e5edf4 repeat-x top;
	border-style:solid;
	border-width:1px;
	border-color:#BCBCBC #BCBCBC #BCBCBC transparent;
}
.dj_ie6 .claro .dojoxGridHeader .dojoxGridCell {
	border-color:#BCBCBC #BCBCBC #BCBCBC #e5edf4;
}
.claro .dojoxGridSortNode {
	background:url(../../../resources/images/header_shadow.png) #e5edf4 repeat-x bottom;
	text-decoration:none;
	display:block;
	padding:4px 6px 5px 6px;
	border:1px solid #e0eefb;
}
.dj_ie6 .claro .dojoxGridSortNode {
	background-image:none;
}
.claro .dojoxGridCellOver .dojoxGridSortNode {
	background-color:#9dcfff;
}
.claro .dojoxGridArrowButtonChar {
	display:none;
	float:right;
}
.claro .dojoxGridArrowButtonNode {
	background:transparent url(../../../../../dijit/themes/claro/images/spriteArrows.png) no-repeat scroll left center;
	display:block;
	float:right;
	height:1em;
	margin:2px 4px 0 5px;
	padding-left:0;
	width:7px;
}
.claro .dojoxGridSortUp .dojoxGridArrowButtonNode {
	background-position:-21px 50%;
}
.dj_ie .claro .dojoxGridHeader .dojoxGridRowTable {
	border-collapse:separate;
}
.claro .dojoxGridScrollbox {
	background-color: #fefefe;
}
.claro .dojoxGridRowbar {
	background:url(../../../resources/images/header.png) #e5edf4 repeat-x top;
	border:none;
	border-right:1px solid #BCBCBC;
}
.claro .dojoxGridRowbarTable {
	background:transparent url(../../../resources/images/header_shadow.png) repeat-x scroll center bottom;
}
.dj_ie6 .claro .dojoxGridRowbar,
.dj_ie6 .claro .dojoxGridRowbarTable {
	background-image:none;
}
.claro .dojoxGridRowbarInner {
	border:none;
	border-bottom:1px solid #ccc;
}
.claro .dojoxGridRowbarOver .dojoxGridRowbarTable {
	background-color:#abd5fd;
}
.claro .dojoxGridRowBarActive .dojoxGridRowbarTable {
	background-color:#91c9fe;
}
.claro .dojoxGridRowbarSelected {
	background-color:#abd5fd;
	border-right:1px solid #ccc;
}
.claro .dojoxGridRow {
	border:none;
	background-color:#fff;
}
.dj_ie .claro .dojoxGridMasterView .dojoxGridRowTable {
	border-collapse:separate;
}
.claro .dojoxGridRowTable tr {
	background:url(../../../resources/images/row_back.png) #fff repeat-x;
}
.claro .dojoxGridRowOdd .dojoxGridRowTable tr {
	background-color:#f7fcff;
}
.claro .dojoxGridRowSelected .dojoxGridRowTable tr {
	background-color:#cee6fa;
}
.claro .dojoxGridCell {
	padding:0px;
	border:1px solid transparent;
}
.dj_ie6 .claro .dojoxGridCell {
	border-color:#fff
}
.dj_ie6 .claro .dojoxGridRowOdd .dojoxGridCell {
	border-left-color:#f4f9fd;
	border-right-color:#f4f9fd;
}
.dj_ie6 .claro .dojoxGridRowSelected .dojoxGridCell {
	border-left-color:#d3e9fb;
	border-right-color:#d3e9fb;
}
.claro .dojoxGridRowSelected .dojoxGridCell {
	border-top:1px solid #BFD6EB;
	border-bottom:1px solid #BFD6EB;
}
.claro .dojoxGridCellFocus {
	border:1px dashed darkblue !important;
}
.claro .dojoxGridCellContent {
	padding:4px 6px 4px 6px;
}
.claro .dojoxGridRowOver .dojoxGridCell {
	background:url(../../../resources/images/row_back.png) #ABD6FF repeat-x;
	border-top:1px solid #769DC0;
	border-bottom:1px solid #769DC0;
}
.dj_ie6 .claro .dojoxGridRowOver .dojoxGridCell,
.dj_ie7 .claro .dojoxGridRowOver .dojoxGridCell {
	border-left:1px solid #ABD6FF;
	border-right:1px solid #ABD6FF;
}
.claro .dojoxGridRowActive .dojoxGridCell {
	background:url(../../../resources/images/td_button_down.png) #7DBEFA repeat-x;
}
.dj_ie6 .claro .dojoxGridRowActive .dojoxGridCell,
.dj_ie7 .claro .dojoxGridRowActive .dojoxGridCell {
	border-left:1px solid #7DBEFA;
	border-right:1px solid #7DBEFA;
}
.claro .dojoxGridDoubleAffordance .dojoxGridRowOver .dojoxGridCellOver {
	border:solid 1px #769dc0;
	background-color:#93cafe;
	border-collapse:separate;
}
.claro .dojoxGridDoubleAffordance .dojoxGridRowActive .dojoxGridCell{
	background-image:url(../../../resources/images/row_back.png);
}
.claro .dojoxGridDoubleAffordance .dojoxGridRowActive .dojoxGridCellActive {
	background:url(../../../resources/images/td_button_down.png) #93cafe repeat-x;
}
.dj_ie6 .claro .dojoxGridCell {
	background-image:none !important;
}
.claro .dojoxGridRowEditing td {

	background-color: #cee6fa;

}
.claro .dojoxGridRow-inserting td {
	background-color: #F4FFF4;
}
.claro .dojoxGridRow-inflight td {
	background-color: #F2F7B7;
}
.claro .dojoxGridRow-error td {
	background-color: #F8B8B6;
}
.claro .dojoxGrid .dojoDndItemBefore {
	border-left-color: #3559ac;
}
.claro .dojoxGrid .dojoDndItemAfter {
	border-right-color: #3559ac;
}
.claro .dojoxGridExpando {
	float: left;
	height: 18px;
	width: 18px;
	text-align: center;
	margin-top: -3px;
}
.dijitRtl .claro .dojoxGridExpando {
	float: right;
}
.claro .dojoxGridExpandoCell {
	padding-top: 5px;
	background-position: left top !important;
}
.claro .dojoxGridExpandoNode {
	background-image: url(../../../../../dijit/themes/claro/images/treeExpandImages.png);
    width: 16px;
    height: 16px;
	background-position: 1px 0px;
}
.dj_ie6 .claro .dojoxGridExpandoNode {
	background-image: url(../../../../../dijit/themes/claro/images/treeExpandImages8bit.png);
}
.claro .dojoxGridRowOver .dojoxGridExpandoNode {
	background-position: -17px 0px;
}
.claro .dojoxGridExpandoOpened .dojoxGridExpandoNode {
	background-position: -35px 0px;
}
.claro .dojoxGridRowOver .dojoxGridExpandoOpened .dojoxGridExpandoNode {
	background-position: -53px 0px;
}
.claro .dojoxGridExpandoLoading .dojoxGridExpandoNode {
	background-image: url(../../../../../dijit/themes/claro/images/loadingAnimation.gif);
}
.claro .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpando {
	visibility: visible !important;
	width: 18px !important;
}
.claro .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpandoNode,
.dj_ie6 .claro .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpandoNode {
	background-image:none;
}
.claro .dojoxGridExpandoNodeInner {
	visibility: hidden;
}
.dijit_a11y .dojoxGridExpandoNodeInner {
	visibility: visible;
}
.claro .dojoxGridSummaryRow .dojoxGridCell {
	border:1px solid transparent;
}
.dj_ie6 .claro .dojoxGridSummaryRow .dojoxGridCell {
	border-color:#fff
}
.claro tr.dojoxGridSubRowAlt {
	background-color:#f4f9fd;
}
.claro .dojoxGridRowOdd tr.dojoxGridSubRowAlt {
	background-color:#fff;
}
.claro .dojoxGridRow .dojoxGridRowTable tr.dojoxGridRowSelected {
	background-color:#cee6fa;
}
.dojoxGrid {
	border:1px solid #DBDBDB;
}
.dojoxGridCellContent {
	padding:3px;
}
.dojoxGridSortNode {
	padding:3px;
}
.dojoxGridInProgress {
	cursor:progress;
}
.dojoxGridRowSelectorStatusText{
	visibility:hidden;
}
.dijit_a11y .dojoxGridRowSelected {
	opacity:0.8 !important;
}
.dijit_a11y .dojoxGridBorderDIV {
	border:2px solid #000 !important;
}
.dijit_a11y .dojoxGridRowSelector {
	height:100% !important;
}
.dijit_a11y .dojoxGridRowSelectorStatusText{
	font-size:larger !important;
	visibility:visible;
}
.dijit_a11y .dijitCheckBox .dojoxGridRowSelectorStatusText{
	font-weight:bolder !important;
	font-size:x-large !important;
}
.dijit_a11y .dijitCheckBoxChecked .dojoxGridRowSelectorStatusText{
	font-size:small !important;
}
.dojoxGridFBar {
	width: 100%;
	cursor: pointer;
}
.dojoxGridFBar .dojoxGridFBarBtn {
	margin: 0;
}
.dojoxGridFBarBtnTD {
	width: 38px;
}
.dojoxGridFBar .dojoxGridFBarBtn .dijitButtonNode {
	-moz-border-radius: 1px;
	-webkit-border-radius: 1px;
	padding-top: 0;
	padding-bottom: 0;
	padding-right: 2px;
}
.dojoxGridFBarDefFilterBtnIcon {
	background: url(../images/sprite_icons.png) no-repeat;
	background-position: -100px -18px;
	width: 14px;
	height: 14px;
}
.dj_ie .dojoxGridFBarInner{
	display: inline-block;
	width: 100%;
}
.dojoxGridFBarStatus {
	margin-left: 9px;
	float: left;
}
.dojoxGridFBarClearFilterBtn {
	margin: 0 0 0 10px;
	vertical-align: top;
	float: left;
}
.dojoxGridFBarInfoTD .dojoxGridFBarClearFilterBtn .dijitButtonNode,
.dojoxGridFBarInfoTD .dojoxGridFBarCloseBtn .dijitButtonNode,
.dojoxGridFDPane .dijitAccordionTitle .dijitButtonNode,
.dojoxGridFStatusTipDetail .dijitButton .dijitButtonNode {
	-moz-border-radius: 0;
	-moz-box-shadow: none;
	-webkit-border-radius: 0;
	-webkit-box-shadow: none;
	background-image: none;
	background-color: transparent;
	margin: 0;
	padding: 0;
	border: none;
}
.dj_ie .dojoxGridFBarInner {
	position: relative;
}
.dojoxGridFBarCloseBtn {
	margin: 0 4px 0 0;
	float: right;
}
.dj_ie .dojoxGridFBarCloseBtn {
	float: none;
	position: absolute;
	right: 0;
}
.dojoxGridFBarCloseBtnIcon {
	background: url(../images/sprite_icons.png) no-repeat;
	background-position: -119px -20px;
	width: 14px;
	height: 14px;
}
.dijitButtonHover .dojoxGridFBarCloseBtnIcon {
	background-position: -140px -20px;
}
.dijitButtonActive .dojoxGridFBarCloseBtnIcon {
	background-position: -160px -20px;
}
.dojoxGridFDTitlePane {
	width: 316px;
	height: 330px;
}
.dijit_a11y .dojoxGridFDTitlePane .dijitArrowButtonInner{

	display:none !important;
}
.dojoxGridFDTitlePane .dijitDialogPaneContent {
	padding: 7px 5px 9px 5px;
	height: 290px !important;
}
.dojoxGridFDTitlePane .dijitTitlePaneTitle {
	cursor: move;
}
.dojoxGridFDPaneRelation {
	margin: 0 0 3px 4px;
}
.dojoxGridFDPane {
	width: 100%;
	height: 100%;
	position: relative;
}
.dojoxGridFDPaneRulePane {
	height: 222px;
	overflow: auto;

	position: relative;
}
.dj_ie6 .dojoxGridFDPaneRulePane {
	width: 100%;
}
.dojoxGridFDPane .dijitAccordionContainer .dijitContentPane {
	padding: 6px 9px;
}
.dojoxGridFDPane .dijitAccordionTitle {
	position: relative;

	min-height: 17px;
}
.dojoxGridFDPane .dijitAccordionTitle .dijitButton {
	position: absolute;
	margin: 0;
	right: 3px;
	top: 4px;
}
.dj_ie6 .dojoxGridFDPane .dijitAccordionTitle .dijitButton {
	top: 2px;
}
.dojoxGridFDPane .dijitAccordionTitleFocus {
	margin-right: 14px;
}
.dojoxGridFDPane .dijitAccordionText {
	display: inline-block;
	position: relative;
}
.dojoxGridFCBoxRemoveCBoxBtnIcon {
	background-image: url(../images/sprite_icons.png);
	background-position: -198px -18px;
	width: 16px;
	height: 16px;
}
.dijitButtonHover .dojoxGridFCBoxRemoveCBoxBtnIcon {
	background-position: -198px 2px;
}
.dojoxGridRuleTitleCondition {
	font-style: italic;
}
.dojoxGridFDPaneModes .dijitSelect {
	position: relative;
}
.dojoxGridFDPaneBtns {
	position: absolute;
	right: 0;
	bottom: 0;
}
.dj_ie7 .dojoxGridFDPaneBtns,
.dj_ie6 .dojoxGridFDPaneBtns {
	z-index: -1;
}
.dojoxGridFDPaneBtns .dijitButton {
	float: right;
}
.dojoxGridFDPaneAddCBoxBtn {
	margin-top: 9px;
}
.dojoxGridFDPaneAddCBoxBtnIcon {
	background-image: url(../images/sprite_icons.png);
	background-position: -218px 2px;
	width: 16px;
	height: 16px;
}
.dijitButtonDisabled .dojoxGridFDPaneAddCBoxBtnIcon {
	background-position: -218px -18px;
}
.dojoxGridFCBox {
	height: 125px;
}
.dojoxGridFCBoxSelCol,
.dojoxGridFCBoxCondition {
	height: 40px;
}
.dojoxGridFCBox .dojoxGridFCBoxColSelect,
.dojoxGridFCBox .dojoxGridFCBoxCondSelect,
.dojoxGridFCBox .dojoxGridFCBoxValueBox {
	margin: 5px 0 0 0;
	width: 100%;

	display: inline-table;
}
.dojoxGridFCBoxCondSelectAlt {
	width: 100%;
	padding: 5px 0 0 0;
	font-weight: bold;
}
.dojoxGridFCBox .dijitSelect .dijitArrowButton {
	width: 18px;
}
.dojoxGridFCBoxStartValue {
	width: 45%;
}
.dojoxGridFCBoxEndValue {
	float: right;
	width: 45%;
}
.dojoxGridFCBoxRangeValueTxt {
	margin-left: 4px;
}
.dojoxGridFStatusTipDialog .dijitTooltipContainer {
	padding: 9px 5px;
}
.dojoxGridFStatusTip thead,
.dojoxGridFStatusTip tr {
	height: 19px;
}
.dojoxGridFStatusTip th {
	max-width: 150px;
	width: expression(this.clientWidth > 150 ? "150px" : "auto");
}
.dojoxGridFStatusTip th div {
	padding: 2px 5px;
}
.dojoxGridFStatusTip td {
	padding: 2px 6px;
	max-width: 150px;
	overflow: hidden;
	width: expression(this.clientWidth > 150 ? "150px" : "auto");
}
.dojoxGridFStatusTipHead {
	margin-bottom: 9px;
}
.dojoxGridFStatusTipTitle {
	font-weight: bold;
	margin-right: 1em;
}
.dojoxGridFStatusTipHandle {
	position: relative;
	padding-right: 16px;
}
.dojoxGridFStatusTipDetail .dijitButton {
	position: absolute;
	margin: 0;
	padding: 0;
	top: -1px;
	right:0;
}
.dojoxGridFStatusTipDelRuleBtnIcon {
	background-image: url(../images/sprite_icons.png);
	background-position: -198px -18px;
	height: 16px;
	width: 16px;
}
.dijitButtonHover .dojoxGridFStatusTipDelRuleBtnIcon {
	background-position: -198px 2px;
}
.dj_ie7 .dojoxGridClearFilterConfirm,
.dj_ie6 .dojoxGridClearFilterConfirm {
	width: 300px;
}
.dojoxGridClearFilterBtns{
	padding: 10px;
	height: 18px;
}
.dojoxGridClearFilterBtns .dijitButton {
	float: right;
}
.dojoxGridTrueBox {
	float: left;
	width: 49%;
}
.dojoxGridFalseBox {
	float: left;
	width: 49%;
}
.dojoxGridBoolValueBox .dijitRadio {
	vertical-align: middle;
}
.dojoxGridTrueLabel,
.dojoxGridFalseLabel {
	width: 116px;
	display:inline-block;
	vertical-align: middle;
}
.dj_ie7 .dojoxGridTrueLabel,
.dj_ie7 .dojoxGridFalseLabel {
	display: inline;
}
.dojoxGridPaginator {
	border-top:1px #DBDBDB solid;
	text-align:center;
	width: 100%;
	height: 24px;
	table-layout : fixed;
	background-color: #EAEAEA;
}
.dojoxGridDescriptionTd {
	text-align: left;
	width: 35%;
}
.dojoxGridDescription {
	text-align: left;
	margin-left: 9px;
	overflow: hidden;
}
.dojoxGridPaginatorFastStep {
	text-align: right;
	width: 35%;
	overflow: hidden;
}
.dojoxGridPaginatorStep {
	float: right;
}
.dojoxGridPaginatorGotoTd {
	width: 20px!important;
}
.dojoxGridPaginatorGotoDiv {
	cursor: pointer;
	width: 12px!important;
	height: 16px!important;
	margin: 0 6px 0 2px;
	background: url(../images/sprite_icons.png) no-repeat -77px 4px;
}
.dojoxGridPaginatorGotoDivDisabled {
	background: url(../images/sprite_icons.png) no-repeat -77px -16px;
}
.dojoxGridWardButton {
	margin-top: 2px;
	width: 12px!important;
	height: 12px!important;
	float: left;
	background: url(../images/sprite_icons.png) no-repeat;
}
.dojoxGridWardButtonInner {
	visibility: hidden;
}
.dijit_a11y .dojoxGridWardButtonInner {
	visibility: visible;
	margin-bottom: 8px;
}
.dojoxGridfirstPageBtn {
	cursor: pointer;
	margin-left: 1px;
	background-position: -57px 3px;
}
.dojoxGridfirstPageBtnDisable {
	margin-left: 1px;
	background-position: -57px -17px;
}
.dojoxGridprevPageBtn {
	cursor: pointer;
	margin: 2px 2px 0 9px;
	background-position: 3px 3px;
}
.dojoxGridprevPageBtnDisable {
	margin: 2px 2px 0 9px;
	background-position: 3px -17px;
}
.dojoxGridlastPageBtn {
	cursor: pointer;
	margin: 2px 9px 0 9px;
	background-position: -37px 3px;
}
.dojoxGridlastPageBtnDisable {
	margin: 2px 9px 0 9px;
	background-position: -37px -17px;
}
.dojoxGridnextPageBtn {
	cursor: pointer;
	margin-left: 3px;
	background-position: -17px 3px;
}
.dojoxGridnextPageBtnDisable {
	margin-left: 3px;
	background-position: -17px -17px;
}
.dojoxGridInactived {
	font-weight: normal;
	color: #5D88AF;
	cursor: pointer;
	margin: 1px 6px 0 5px;
	float: left;
	zoom: 1;
}
.dojoxGridActived {
	font-weight: bold;
	color: black;
	margin: 1px 6px 0 5px;
	float: left;
	text-decoration: none!important;
	zoom: 1;
}
.dojoxGridInactiveSwitch {
	font-weight: normal;
	color: #5D88AF;
	float: left;
	cursor: pointer;
	margin: 1px 7px 0 7px;
	zoom: 1;
}
.dojoxGridActivedSwitch {
	font-weight: bold;
	color: black;
	float: left;
	margin: 1px 7px 0 7px;
	text-decoration: none!important;
	zoom: 1;
}
.dojoxGridSeparator {
	float: left;
}
.dojoxGridPageTextHover {
	text-decoration: underline;
}
.dojoxGridDialogMargin {
	width: 220px!important;
	margin-bottom: 10px;
}
.dj_ie6 .dojoxGridDialogMargin {
	position: relative;
}
.dojoxGridDialogButton {
	width: 220px!important;
	text-align: right;
}
.dojoxGridBorderDIV {
	width:2px;
	background-color: gray;
	font-size:0em;
	position:absolute;
	z-index:9999;
}
.dojoxGridCellBorderDIV {
	position:absolute;
	background-color: transparent;
	border: none;
}
.dojoxGridCellBorderLeftTopDIV {
	position: absolute;
	left: 0;
	top: 0;
	border-style: solid;
	border-width: 2px 0 0 2px;
	border-color: gray transparent transparent gray;
}
.dojoxGridCellBorderRightBottomDIV {
	position: absolute;
	right: 0;
	bottom: 0;
	border-style: solid;
	border-width: 0 2px 2px 0;
	border-color: transparent gray gray transparent;
}
.dojoxGridDnDItemIcon {
	background-image: url(../images/sprite_icons.png);
}
.dojoxGridDnDIconRowSingle {
	background-position: -256px 5px;
}
.dojoxGridDnDIconRowMulti {
	background-position: -256px -16px;
}
.dojoxGridDnDIconColSingle {
	background-position: -277px 3px;
}
.dojoxGridDnDIconColMulti {
	background-position: -277px -17px;
}
.dojoxGridDnDIconCellSingle {
	background-position: -235px 5px;
}
.dojoxGridDnDIconCellMulti {
	background-position: -236px -16px;
}
.dojoxGridDndAvatar {
	background-color:white;
	border: 1px solid #CCCCCC;
	padding: 0px;
	-moz-box-shadow: 5px 5px 7px #999;
	-webkit-box-shadow: 5px 5px 7px #999;
	box-shadow: 5px 5px 7px #999;
	z-index: 999;
}
.dojoxGridDndAvatar td {
	padding: 3px;
}
.dojoxGridDnDIcon,
.dojoxGridDnDItemIcon {
	width: 16px;
	height: 16px;
}
.dojoDndMove .dojoxGridDnDIcon {
	background: url(../../../../../dojo/resources/images/dndNoMove.png) no-repeat center center;
}
.dojoDndCopy .dojoxGridDnDIcon {
	background: url(../../../../../dojo/resources/images/dndNoCopy.png) no-repeat center center;
}
.dojoDndMove .dojoDndAvatarCanDrop .dojoxGridDnDIcon {
	background: url(../../../../../dojo/resources/images/dndMove.png) no-repeat center center;
}
.dojoDndCopy .dojoDndAvatarCanDrop .dojoxGridDnDIcon {
	background: url(../../../../../dojo/resources/images/dndCopy.png) no-repeat center center;
}
.dojoxGrid .dojoxGridSortNode {
	position: relative;
	border: 1px solid transparent;
}
.dj_ie6 .dojoxGrid .dojoxGridSortNode {
	overflow: hidden;
	width:100%;
}
.dojoxGrid .dojoxGridSortNoWrap {
	white-space:nowrap;
	cursor: pointer;
}
.dojoxGridSortBtn {
	width: 10px;
	height:100%;
	visibility: hidden;
	top: 0;
	display:block;
	position: absolute;
	color: #000;
	background: #DFEAF1 url(../images/sprite_icons.png) no-repeat 100px 0;
	text-decoration: none;
	outline: none;
	right: 0;
	border: 1px solid transparent;
	box-sizing: border-box;
	-moz-box-sizing: border-box;
	-ms-box-sizing: border-box;
	-webkit-box-sizing: border-box;
	-khtml-box-sizing: border-box;
}
.dj_ie6 .dojoxGridSortBtn,
.dj_ie6 .dojoxGrid .dojoxGridSortNode {
	border: none;
}
.dojoxGridSortBtnNested {
	right: 10px;
}
.dojoxGridCellSortFocus  .dojoxGridSortBtn {
	border-left: 1px solid #999999;
	background-color: #DFEAF1;
}
.dojoxGridCellOver .dojoxGridSortBtn {
	border-left: 1px solid #999999;
	background-color: #9dcfff;
}
.dojoxGridSortNode {
	outline: none;
}
.dojoxGridSorted .dojoxGridCellOver .dojoxGridSortNode,
.dojoxGridCellSortFocus .dojoxGridSortNode,
.dojoxGridSingleSorted .dojoxGridHeader .dojoxGridCellOver .dojoxGridSortNodeMain,
.dojoxGridSingleSorted .dojoxGridHeader .dojoxGridCellSortFocus .dojoxGridSortNodeMain {
	margin-right: 5px;
}
.dojoxGridSorted .dojoxGridCellOver .dojoxGridSortNode,
.dojoxGridSorted .dojoxGridCellSortFocus .dojoxGridSortNode {
	margin-right: 24px;
}
html > body .dojoxGridCellOver .dojoxGridSortNode .dojoxGridSortBtnSingle {
	right: -5px;
}
html > body .dojoxGridCellSortFocus .dojoxGridSortNode .dojoxGridSortBtnSingle,
html > body .dojoxGridSorted .dojoxGridCellOver .dojoxGridSortNodeMain .dojoxGridSortBtnSingle,
html > body .dojoxGridSorted .dojoxGridCellSortFocus .dojoxGridSortNodeMain .dojoxGridSortBtnSingle {
	right: -10px;
}
html > body .dojoxGridSorted .dojoxGridCellOver .dojoxGridSortBtnSingle,
html > body .dojoxGridSorted .dojoxGridCellSortFocus .dojoxGridSortBtnSingle,
html > body .dojoxGridNestSorted .dojoxGridCellOver .dojoxGridSortNodeMain .dojoxGridSortBtnSingle,
html > body .dojoxGridNestSorted .dojoxGridCellSortFocus .dojoxGridSortNodeMain .dojoxGridSortBtnSingle {
	right: -28px;
}
html > body .dojoxGridSorted .dojoxGridCellOver .dojoxGridSortBtnNested,
html > body .dojoxGridSorted .dojoxGridCellSortFocus .dojoxGridSortBtnNested {
	right: -17px;
}
.dojoxGrid .dojoxGridHeader .dojoxGridRowTable .dojoxGridNoSort .dojoxGridSortNode {
	margin:0!important;
}
.dojoxGrid .dojoxGridCellOver .dojoxGridSortNode .dojoxGridSortBtnSingle,
.dojoxGrid .dojoxGridCellSortFocus .dojoxGridSortNode .dojoxGridSortBtnSingle,
.dojoxGridSorted .dojoxGridCellOver .dojoxGridSortNode .dojoxGridSortBtnNested,
.dojoxGridSorted .dojoxGridCellSortFocus .dojoxGridSortNode .dojoxGridSortBtnNested,
.dojoxGrid .dojoxGridCellShowIndex .dojoxGridSortNode .dojoxGridSortBtnNested,
.dojoxGrid .dojoxGridSortNodeSorted .dojoxGridSortBtn {
	visibility: visible;
}
.dojoxGridSingleSorted .dojoxGridCellOver .dojoxGridSortNodeMain .dojoxGridSortBtnNested,
.dojoxGridSingleSorted .dojoxGridCellSortFocus .dojoxGridSortNodeMain .dojoxGridSortBtnNested,
.dojoxGridSingleSorted .dojoxGridSortNode .dojoxGridSortBtnNested {
	visibility: hidden;
}
.dojoxGridSortNodeAsc .dojoxGridSortBtnSingle {
	background-position: -119px 5px;
	visibility: visible;
}
.dojoxGridSortNodeDesc .dojoxGridSortBtnSingle {
	background-position: -99px  5px;
	visibility: visible;
}
.dojoxGridCellOver .dojoxGridSortBtnSingle,
.dojoxGridCellSortFocus .dojoxGridSortBtnSingle {
	background-position: -159px 5px;
}
.dojoxGridCellOver .dojoxGridSortNodeAsc .dojoxGridSortBtnSingle,
.dojoxGridCellSortFocus .dojoxGridSortNodeAsc .dojoxGridSortBtnSingle,
.dojoxGrid .dojoxGridCellOver .dojoxGridSortNode .dojoxGridSortBtnAsc,
.dojoxGrid .dojoxGridCellSortFocus .dojoxGridSortNode .dojoxGridSortBtnAsc {
	background-position: -139px 5px;
}
.dojoxGridCellOver .dojoxGridSortNodeDesc .dojoxGridSortBtnSingle,
.dojoxGridCellSortFocus .dojoxGridSortNodeDesc .dojoxGridSortBtnSingle,
.dojoxGrid .dojoxGridCellOver .dojoxGridSortNode .dojoxGridSortBtnDesc,
.dojoxGrid .dojoxGridCellSortFocus .dojoxGridSortNode .dojoxGridSortBtnDesc {
	background-position: -179px 5px;
}
.dojoxGridCellOver .dojoxGridSortBtnNested,
.dojoxGridCellSortFocus .dojoxGridSortBtnNested {
	background-position: -149px 5px;
	width: 19px;
}
.dojoxGridCellOver .dojoxGridSortNodeAsc .dojoxGridSortBtnNested,
.dojoxGridCellSortFocus .dojoxGridSortNodeAsc .dojoxGridSortBtnNested {
	background-position: -129px 5px;
}
.dojoxGridCellOver .dojoxGridSortNodeDesc .dojoxGridSortBtnNested,
.dojoxGridCellSortFocus .dojoxGridSortNodeDesc .dojoxGridSortBtnNested {
	background-position: -169px 5px;
}
.dojoxGridNestSorted .dojoxGridCellOver .dojoxGridSortBtnSingle,
.dojoxGridNestSorted .dojoxGridCellSortFocus .dojoxGridSortBtnSingle {
	background-position: -159px 5px;
}
.dojoxGridCellOver .dojoxGridSortBtn:hover {
	background-color:#A3E4FF;
}
.dojoxGrid .dojoxGridSortNodeFocus,
.dojoxGridCellSortFocus .dojoxGridRowSelector,
.dojoxGridCellSortFocus .dojoxGridSortBtnFocus {
	border: 1px dashed #666;
}
.dijitToasterContent {
	padding:1em;
	padding-top:0.25em;
	background:#73c74a;
}
.dijitToasterMessage{
	color:#fff;
}
.dijitToasterWarning{ }
.dijitToasterError,
.dijitToasterFatal{
	font-weight:bold;
	color:#fff;
}
.dijitToasterWarning .dijitToasterContent{
	padding:1em;
	padding-top:0.25em;
	background:#d4d943;
}
.dijitToasterError .dijitToasterContent{
	padding:1em;
	padding-top:0.25em;
	background:#c46600;
}

.dijitToasterClip {
	position: absolute;
	z-index: 5000;
	overflow: hidden;
}
.dijitToasterContainer {
	display: block;
	position: absolute;
	width: 17.5em;
	margin: 0px;
	font:0.75em Tahoma, Helvetica, Verdana, Arial;
}

.dojoxEllipsis,
.dojoxEllipsisShown {
	white-space: nowrap;
	width: 100%;
	overflow: hidden;
	text-overflow: ellipsis;
	-o-text-overflow: ellipsis;
	-webkit-text-overflow: ellipsis;
}
.dojoxEllipsis window {
    width:100%;
    -moz-user-focus:normal;
    -moz-user-select:text;
}
.dojoxEllipsis description{
    -moz-user-focus:normal;
    -moz-user-select:text;
}
.dojoxEllipsisIFrame{
	white-space: normal;
	border: none;
	width: 100%;
	display: block;
	height: 1px;
	margin-top: -1px;
	clear: both;
}
.dojoxEllipsisContainer{
	width: 100%;
}
.dojoxEllipsisShown:after{
	content: "\2026"
}
.claro .dojoxGridMasterHeader .dojoxGridRowTable {
	border-left: 1px solid #BCBCBC;
	border-right: 1px solid white;
	background-color: transparent;
}
.claro .dojoxGridHeader tr:first-child .dojoxGridCell {
	border-top: 1px solid transparent;
}
.claro .dojoxGridHeader:first-child .dojoxGridRowTable {
	border-left-width: 0;
}
.claro .dojoxGridMasterHeader {
	background: url(../../../resources/images/header.png) #EDF2F7 repeat-x bottom;
	background: -moz-linear-gradient(top, #EDF2F7, #D0DFEA);
	background: -webkit-gradient(linear, left top, left bottom, from(#EDF2F7), to(#D0DFEA));
	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#FFEDF2F7, endColorstr=#FFD0DFEA);
	border-bottom: 1px solid white;
	border-left: 1px solid white;
	border-top: 1px solid white;
}
.claro .dojoxGridCell {
	padding: 3px 5px;
	border-color: transparent #E5DAC8 #E5DAC8 transparent;
}
.dj_ie6 .claro .dojoxGridCell{
	border-color:#F5F5F5;
}
.claro .dojoxGridHeader {
	background: transparent;
	margin-left: -2px;
}
.claro .dojoxGridHeader:first-child {
	margin-left: -1px;
}
.claro .dojoxGridHeader .dojoxGridCell{
	padding: 2px 5px;
	background: transparent;
	border-bottom: 1px solid #BCBCBC;
	border-top: 1px solid white;
	border-left: 1px solid white;
	border-right: 1px solid #BCBCBC;
	vertical-align: top;
}
.claro .dojoxGridHeader .dojoxGridCellOver {
	background:#9dcfff;
}
.claro .dojoxGridSortNode{
	white-space: normal;
	background: none;
	border: none;
	padding: 0;
}
.claro .dojoxGridHeader .dojoxGridRowTable tr {
	background:none;
}
.claro .dojoxGridCellContent {
	padding:4px 6px 4px 6px;
}
.dj_webkit .claro th.dojoxGridCell > .dojoxGridCellContent {
	padding: 4px 0;
}
.claro .dojoxGridRowbarInner {
	width:20px;
}
.claro .dojoxGridHeaderSelected .dojoxGridHeaderActive {
	background-color:#91c9fe;
}
.claro td.dojoxGridRowSelected {
	border-collapse:separate;
	background:url(../../../resources/images/row_back.png) #CEE6FA repeat-x;
}
.claro .dojoxGridRowOver td.dojoxGridRowSelected {
	border-top:1px solid #769DC0;
	border-bottom:1px solid #769DC0;
}
.claro .dojoxGridRowActive td.dojoxGridRowSelected {
	background-image:url(../../../resources/images/td_button_down.png);
}
.dj_ie6 .claro .dojoxGridRowOver .dojoxGridCell {
	border-color: #ABD6FF;
}
.dj_ie6 .claro .dojoxGridRowActive .dojoxGridCell {
	border-color: #7DBEFA;
}
.claro .dojoxGridCell,
.claro .dojoxGridCellFocus {
	outline: none;
}
.claro .dojoxGridPaginator{
	background: url(../../../resources/images/header_shadow.png) repeat-x scroll center bottom #E5EDF4;

}
.claro .dojoxGridFBarInfoTD {
	background: url(../../../resources/images/header_shadow.png) #F2F9FF repeat-x bottom;
	background: -moz-linear-gradient(top, #F2F9FF, #EAF5FF);
	background: -webkit-gradient(linear, left top, left bottom, from(#F2F9FF), to(#EAF5FF));
	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#FFF2F9FF, endColorstr=#FFEAF5FF);
}
.claro .dojoxGridFBarHover .dojoxGridFBarInfoTD {
	background: url(../../../resources/images/header_shadow.png) #F2F9FF repeat-x bottom;
	background: -moz-linear-gradient(top, #ECF6FF 2px, #F2F9FF, #EAF5FF 6px);
	background: -webkit-gradient(linear, left top, left bottom, color-stop(0.1, #ECF6FF), color-stop(0.6, #F2F9FF), color-stop(0.8, #EAF5FF));
}
.dj_gecko .claro .dojoxGridFBarInfoTD,
.dj_webkit .claro .dojoxGridFBarInfoTD {
	border-top: 1px solid #BFD6EB;
	border-bottom: 1px solid #BFD6EB;
}
.dj_ie .claro .dojoxGridFBarInner{
	border-top: 1px solid #BFD6EB;
	border-bottom: 1px solid #BFD6EB;
	display:inline-block;
	width: 100%;
}
.claro .dojoxGridFBarClearFilterBtn {
	color: #5B83B6;
}
.claro .dojoxGridFBarInfoTD .dojoxGridFBarClearFilterBtn.dijitButtonHover .dijitButtonText {
	text-decoration: underline;
}
.claro .dojoxGridFBar {
	border-left: 1px solid white;
}
.claro .dojoxGridFStatusTip table {
	border: 1px solid #BCBCBC;
}
.claro .dojoxGridFStatusTip th {
	background-color: #E8EFF4;
	border-bottom: 1px solid #BCBCBC;
}
.claro .dojoxGridFStatusTip th div {
	background-color: #E8EFF4;
	border-left: 1px solid white;
	border-right: 1px solid #BCBCBC;
	border-top: 1px solid white;
	border-bottom: 1px solid white;
}
.claro .dojoxGridFStatusTip th.lastColumn div {
	border-right: 1px solid white;
}
.claro .dojoxGridFStatusTip td {
	border-top: 1px solid white;
	border-bottom: 1px solid white;
}
.claro .dojoxGridFStatusTipRel,
.claro .dojoxGridFStatusTipCondition {
	font-style: italic;
}
.claro .dojoxGridFStatusTipOddRow {
	background-color: #F1F8FF;
}


text:
 - [Buy It](https://merchantprotocol.com/store/magento-extensions/magento-v1-0/multi-warehouse-plus.html)
 - [Demo It](http://demo.merchantprotocol.com/M1-warehouse-plus/)
 - [Forum: Talk About It](https://merchantprotocol.com/forums/forum/magento-plugin-forum/multiple-warehouse-inventory-management-plus-pricing/)

When expanding your business, you will be faced with the problem of multiple Magento® warehouses. Magento lets you ship items from a single storage warehouse, not even giving the option to manage multiple warehouses gloablly.

We offer the solution to this problem. Merchant Protocol implements a Multi-Warehouse with improved functionalities, providing you with more options and features. This incomparable tool extends the capabilities of your multiple warehouses management, giving you the agility you need.
Features List
1. Multiple Warehouse Support
2. Flexible Configuration Settings
3. Shipping

 - Shipping from a single warehouse which is the closest to the customer's location
 - Shipping from a single warehouse which is located in the customer's area
 - Shipping from a single warehouse depending on website / store / store view
 - Shipping from a single warehouse selected by your customer
 - Shipping from multiple warehouses by the lowest shipping price
 - Shipping from multiple warehouses by the lowest tax price
 - Shipping from multiple warehouses by the lowest products price (Lowest Subtotal)
 - Shipping from multiple warehouses by the lowest cart price (Lowest Grand total)
 - Shipping from multiple warehouses starting with the highest priority warehouse
 - Shipping from multiple warehouses according to the customer's preference
 - Extended shipping table rates
 - Ability to specify shipping methods per warehouse
 - Ability to specify shipping methods per product
 - Split product quantity for delivery according to the availability of items at the warehouses
 - Force no backorders for cart
 - Force no backorders for cart item

4. Marketing Promotions and Tools

 - Product discounts per warehouse

5. Order Management

 - Ability for admin to change the warehouse for delivery when processing the order (switch warehouse from the administration panel)
 - Notification about new orders by email for each warehouse
 - Keep track of orders / invoices / shipments / credit memos by warehouses
 - Ability to split shopping cart order into several orders for each warehouse separately

6. Catalog Management

 - Extended Dataflow
 - Extended API
 - Multiple locations with its own stock levels, products and alerts
 - Common products with independent stock counts for all your warehouses
 - Keep track of the inventory of each item for each one of your warehouses
 - Set warehouse priority at the product level
 - Shelf information
 - Notification of how many products are below the lower bound limit for each warehouse

7. Warehouse Management

 - Prioritize your warehouses in order to offer products from warehouses in accordance with their priority status
 - Keep track of product quantity on warehouse basis
 - Option to hide warehouse information from the public

8. Customer Locator

 - Detect customer's location by IP address
 - Allow a customer to modify a location (Region / State, ZIP / Postal Code, City)
 - Apply default shipping address optionally
 - Apply default location defined in settings
 - Customize Your Location box (Don't hide required fields)
 - Select from address book

9. Customer Experience
9.1. Delivery Methods
9.1.1. Single Mode

 - Assign a customer to a specific warehouse
 - Assign a customer to a specific warehouse by areas / zones accordingly to his / her place of residence
 - Assign a customer to the nearest warehouse according to his / her place of residence
 - Assign a website / store / store view to a certain warehouse

Use all the power of this Magento extension to organize your stock and multi depot according to your preferences. With Multi-Warehouse you will be able to solve a wide range of tasks, taking your inventory management to a new level and improving your warehouses performance. Enjoy all the advantages of dealing with our powerful module. Above is a list of articles that will give you the full details about the Multi-Warehouse plugin.

redpajama_set_name: RedPajamaGithub


text:
<?php

final class PhabricatorFerretFulltextStorageEngine
  extends PhabricatorFulltextStorageEngine {

  private $fulltextTokens = array();
  private $engineLimits;

  public function getEngineIdentifier() {
    return 'mysql';
  }

  public function getHostType() {
    return new PhabricatorMySQLSearchHost($this);
  }

  public function reindexAbstractDocument(
    PhabricatorSearchAbstractDocument $doc) {

    // NOTE: The Ferret engine indexes are rebuilt by an extension rather than
    // by the main fulltext engine, and are always built regardless of
    // configuration.

    return;
  }

  public function executeSearch(PhabricatorSavedQuery $query) {
    $all_objects = id(new PhutilClassMapQuery())
      ->setAncestorClass('PhabricatorFerretInterface')
      ->execute();

    $type_map = array();
    foreach ($all_objects as $object) {
      $phid_type = phid_get_type($object->generatePHID());

      $type_map[$phid_type] = array(
        'object' => $object,
        'engine' => $object->newFerretEngine(),
      );
    }

    $types = $query->getParameter('types');
    if ($types) {
      $type_map = array_select_keys($type_map, $types);
    }

    $offset = (int)$query->getParameter('offset', 0);
    $limit  = (int)$query->getParameter('limit', 25);

    // NOTE: For now, it's okay to query with the omnipotent viewer here
    // because we're just returning PHIDs which we'll filter later.
    $viewer = PhabricatorUser::getOmnipotentUser();

    $type_results = array();
    $metadata = array();
    $bodies = array();
    foreach ($type_map as $type => $spec) {
      $engine = $spec['engine'];
      $object = $spec['object'];

      $local_query = new PhabricatorSavedQuery();
      $local_query->setParameter('query', $query->getParameter('query'));

      $project_phids = $query->getParameter('projectPHIDs');
      if ($project_phids) {
        $local_query->setParameter('projectPHIDs', $project_phids);
      }

      $subscriber_phids = $query->getParameter('subscriberPHIDs');
      if ($subscriber_phids) {
        $local_query->setParameter('subscriberPHIDs', $subscriber_phids);
      }

      $search_engine = $engine->newSearchEngine()
        ->setViewer($viewer);

      $engine_query = $search_engine->buildQueryFromSavedQuery($local_query)
        ->setViewer($viewer);

      $engine_query
        ->withFerretQuery($engine, $query)
        ->setOrder('relevance')
        ->setLimit($offset + $limit);

      $objects = $engine_query->execute();
      $fulltext_engine = null;
      foreach ($objects as $object) {
        $phid = $object->getPHID();
        if ($fulltext_engine == null) {
          $fulltext_engine = $object->newFulltextEngine();
        }

        $fulltext_engine->setObject($object);
        $document = $fulltext_engine->buildEphemeralAbstractDocument();
        $fields = $document->getFieldData();
        foreach ($fields as $field) {
          if ($field[0] == 'body') {
            $body = $field[1];
            $bodies[$phid] = $body;
            break;
          }
        }

      }
      $results = mpull($objects, null, 'getPHID');
      $type_results[$type] = $results;

      $metadata += $engine_query->getFerretMetadata();

      if (!$this->fulltextTokens) {
        $this->fulltextTokens = $engine_query->getFerretTokens();
      }
    }

    $list = array();
    foreach ($type_results as $type => $results) {
      $list += $results;
    }

    // Currently, the list is grouped by object type. For example, all the
    // tasks might be first, then all the revisions, and so on. In each group,
    // the results are ordered properly.

    // Reorder the results so that the highest-ranking results come first,
    // no matter which object types they belong to.

    $metadata = msortv($metadata, 'getRelevanceSortVector');
    $list = array_select_keys($list, array_keys($metadata)) + $list;

    $result_slice = array_slice($list, $offset, $limit, true);
    $phids = array_keys($result_slice);

    return id(new PhabricatorFulltextResultSet())
      ->setPHIDs($phids)
      ->setFulltextTokens($this->getFulltextTokens())
      ->setBodies($bodies);
  }

  public function indexExists() {
    return true;
  }

  public function getIndexStats() {
    return false;
  }

  public function getFulltextTokens() {
    return $this->fulltextTokens;
  }

}


text:
<!DOCTYPE html>

    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
    <meta charset="utf-8"/>
    <title>API Documentation</title>
    <meta name="author" content=""/>
    <meta name="description" content=""/>

    <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.no-icons.min.css" rel="stylesheet">
    <link href="http://netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.min.css" rel="stylesheet">
    <link href="../css/prism.css" rel="stylesheet" media="all"/>
    <link href="../css/template.css" rel="stylesheet" media="all"/>

    <link rel="shortcut icon" href="../images/favicon.ico"/>
    <link rel="apple-touch-icon" href="../images/apple-touch-icon.png"/>
    <link rel="apple-touch-icon" sizes="72x72" href="../images/apple-touch-icon-72x72.png"/>
    <link rel="apple-touch-icon" sizes="114x114" href="../images/apple-touch-icon-114x114.png"/>

            API Documentation

                            API Documentation

                            Charts

                                     Class hierarchy diagram

                            Reports

                                     Errors

                                     Markers

                                \

AnnouncementsController

AppController

CalculatorsController

AlgorithmComponent

MedicinesController

PagesController

PatientsController

UsersController

VisitsController

AppModel

Diagnosis

DrugAllergy

MedhistoryComplaint

Medicine

Patient

Profile

Treatment

TreatmentRunAlgorithm

User

Visit

VitalsLab

                                                \

\PagesController

Static content controller

Override this controller by placing a copy in controllers directory of an application

Summary

                                Methods

                                Properties

                                Constants

                                                                    welcome()

                                                                    display()

                                                                    beforeFilter()

                                                                    authenticate_user()

                                                                    user_session()

                                                                    authenticate_admin()

                                                                    can()

                                                                    $uses

                                                                    $components

                                                                    $current_user

                                                                    $helpers

                                                                    No constants found

                                                                    No protected methods found

                                                                    No protected properties found

                                N/A

                                                                    No private methods found

                                                                    No private properties found

                                N/A

File

Controller\PagesController.php

Package

\app.Controller

Class hierarchy

\Controller

\AppController

\PagesController

See also

http://book.cakephp.org/2.0/en/controllers/pages-controller.html

Tags

None found

Properties

$uses

$uses : array

This controller does not use a model

Type

                array

Tags

None found

$components

$components

Inherited from

\AppController

Tags

None found

$current_user

$current_user

Inherited from

\AppController

Tags

None found

$helpers

$helpers

Inherited from

\AppController

Tags

None found

Methods

welcome()

welcome() : void

Displays a welcome page

Throws

\NotFoundException

When the view file could not be found
 or MissingViewException in debug mode.

Tags

None found

display()

display() : void

Displays a view

Throws

\NotFoundException

When the view file could not be found
 or MissingViewException in debug mode.

Tags

None found

beforeFilter()

beforeFilter()

Inherited from

\AppController

Tags

None found

authenticate_user()

authenticate_user()

Inherited from

\AppController

Tags

None found

user_session()

user_session()

Inherited from

\AppController

Tags

None found

authenticate_admin()

authenticate_admin()

Inherited from

\AppController

Tags

None found

can()

can( $action,  $modelName)

Parameters

                                $action

                                $modelName

Inherited from

\AppController

Tags

None found

            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>

PagesController.php

Class Hierarchy Diagram

Errors

Markers

                    Documentation is powered by phpDocumentor  and authored
                    on December 2nd, 2013 at 21:25.


text:
'use strict';
var strong = require('./$.collection-strong');

// 23.2 Set Objects
require('./$.collection')('Set', {
  // 23.2.3.1 Set.prototype.add(value)
  add: function add(value){
    return strong.def(this, value = value === 0 ? 0 : value, value);
  }
}, strong);


text:
<?php

namespace AlbumTest\Controller;

use AlbumTest\Bootstrap;
use Album\Controller\AlbumController;
use Zend\Http\Request;
use Zend\Http\Response;
use Zend\Mvc\MvcEvent;
use Zend\Mvc\Router\RouteMatch;
use Zend\Mvc\Router\Http\TreeRouteStack as HttpRouter;
use PHPUnit_Framework_TestCase;

/**
 * Tests AlbumController actions.
 */
class AlbumControllerTest extends PHPUnit_Framework_TestCase {

    /**
     * Instance of album controller.
     *
     * @var \Album\Controller\AlbumController
     */
    protected $_controller;

    /**
     * HTTP request.
     *
     * @var Zend\Http\Request
     */
    protected $_request;

    /**
     * HTTP Response.
     *
     * @var Zend\Http\Response
     */
    protected $_response;

    /**
     * The router mapping matcher.
     *
     * @var Zend\Mvc\Router\RouteMatch
     */
    protected $_routeMatch;

    /**
     * MVC Event to monitor requests and actions.
     *
     * @var Zend\Mvc\MvcEvent
     */
    protected $_event;

    /**
     * The default test setup before start.
     *
     * @return void
     */
    protected function setUp() {
        $serviceManager = Bootstrap::getServiceManager();
        $this->_controller = new AlbumController();
        $this->_request    = new Request();
        $this->_routeMatch = new RouteMatch(array('controller' => 'index'));
        $this->_event      = new MvcEvent();
        $config = $serviceManager->get('Config');
        $routerConfig = isset($config['router']) ? $config['router'] : array();
        $router = HttpRouter::factory($routerConfig);
        $this->_event->setRouter($router);
        $this->_event->setRouteMatch($this->_routeMatch);
        $this->_controller->setEvent($this->_event);
        $this->_controller->setServiceLocator($serviceManager);
    }

    /**
     * Album 'add' action acceesibility test.
     *
     * @return void
     */
    public function testAddActionCanBeAccessed() {
        $this->_routeMatch->setParam('action', 'add');

        $this->_controller->dispatch($this->_request);
        $response = $this->_controller->getResponse();

        $this->assertEquals(200, $response->getStatusCode());
    }

    /**
     * Album delete action accessibility test.
     *
     * @return void
     */
    public function testDeleteActionCanBeAccessed() {
        $this->_routeMatch->setParam('action', 'delete');

        $this->_controller->dispatch($this->_request);
        $response = $this->_controller->getResponse();

        $this->assertEquals(200, $response->getStatusCode());
    }

    /**
     * Album 'edit' action accessibility test.
     *
     * @return void
     */
    public function testEditActionCanBeAccessed() {

        $this->_routeMatch->setParam('action', 'edit');

        $this->_controller->dispatch($this->_request);
        $response = $this->_controller->getResponse();

        $this->assertEquals(200, $response->getStatusCode());
    }

    /**
     * Album 'index' action accessibility test.
     *
     * @return void
     */
    public function testIndexActionCanBeAccessed() {
        $this->_routeMatch->setParam('action', 'index');

        $this->_controller->dispatch($this->_request);
        $response = $this->_controller->getResponse();

        $this->assertEquals(200, $response->getStatusCode());
    }

}


text:
package org.apache.pulsar.broker.service.schema;

import java.util.concurrent.CompletableFuture;
import org.apache.pulsar.common.schema.SchemaVersion;

public interface SchemaStorage {

    CompletableFuture<SchemaVersion> put(String key, byte[] value, byte[] hash);

    CompletableFuture<StoredSchema> get(String key, SchemaVersion version);

    CompletableFuture<SchemaVersion> delete(String key);

    SchemaVersion versionFromBytes(byte[] version);

    void start() throws Exception;

    void close() throws Exception;

}


text:
'use strict'

var JSZip = require('jszip')
var fs = require('fs')

function archiver(key, callback) {
  var zip = new JSZip()
  var root = './build/' + key
  //zip.file('ReactUI.js', fs.readFileSync(path + 'ReactUI.js'))

  function walk (path) {
    var dirList = fs.readdirSync(path)
    dirList.forEach(function(item) {
      if (fs.statSync(path + '/' + item).isDirectory()){
        walk(path + '/' + item)
      } else {
        var sp = path.replace(root, '')
        if (sp.length > 0) {
          sp = sp.substr(1)
          zip.folder(sp).file(item, fs.readFileSync(path + '/' + item))
        } else {
          zip.file(item, fs.readFileSync(path + '/' + item))
        }
      }
    })
  }

  walk(root)

  var data = zip.generate({type:"nodebuffer"})
  fs.writeFile('./static/dist/' + key + '.zip', data, function () {
    callback(null, 'dist/' + key + '.zip')
  })
}

function zipThunk(key) {
  return function (callback) {
    archiver(key, callback)
  }
}

module.exports = zipThunk


text:
SET(CMAKE_DEPENDS_LANGUAGES
  "CXX"
  )
# The set of files for implicit dependencies of each language:
SET(CMAKE_DEPENDS_CHECK_CXX
  "/home/fify/Project/KFS/trunk/src/cc/tools/KfsCd.cc" "/home/fify/Project/KFS/trunk/src/cc/tools/CMakeFiles/tools.dir/KfsCd.o"
  "/home/fify/Project/KFS/trunk/src/cc/tools/KfsChangeReplication.cc" "/home/fify/Project/KFS/trunk/src/cc/tools/CMakeFiles/tools.dir/KfsChangeReplication.o"
  "/home/fify/Project/KFS/trunk/src/cc/tools/KfsCp.cc" "/home/fify/Project/KFS/trunk/src/cc/tools/CMakeFiles/tools.dir/KfsCp.o"
  "/home/fify/Project/KFS/trunk/src/cc/tools/KfsLs.cc" "/home/fify/Project/KFS/trunk/src/cc/tools/CMakeFiles/tools.dir/KfsLs.o"
  "/home/fify/Project/KFS/trunk/src/cc/tools/KfsMkdirs.cc" "/home/fify/Project/KFS/trunk/src/cc/tools/CMakeFiles/tools.dir/KfsMkdirs.o"
  "/home/fify/Project/KFS/trunk/src/cc/tools/KfsMv.cc" "/home/fify/Project/KFS/trunk/src/cc/tools/CMakeFiles/tools.dir/KfsMv.o"
  "/home/fify/Project/KFS/trunk/src/cc/tools/KfsPwd.cc" "/home/fify/Project/KFS/trunk/src/cc/tools/CMakeFiles/tools.dir/KfsPwd.o"
  "/home/fify/Project/KFS/trunk/src/cc/tools/KfsRm.cc" "/home/fify/Project/KFS/trunk/src/cc/tools/CMakeFiles/tools.dir/KfsRm.o"
  "/home/fify/Project/KFS/trunk/src/cc/tools/KfsRmdir.cc" "/home/fify/Project/KFS/trunk/src/cc/tools/CMakeFiles/tools.dir/KfsRmdir.o"
  "/home/fify/Project/KFS/trunk/src/cc/tools/MonUtils.cc" "/home/fify/Project/KFS/trunk/src/cc/tools/CMakeFiles/tools.dir/MonUtils.o"
  "/home/fify/Project/KFS/trunk/src/cc/tools/utils.cc" "/home/fify/Project/KFS/trunk/src/cc/tools/CMakeFiles/tools.dir/utils.o"
  )
SET(CMAKE_CXX_COMPILER_ID "GNU")

# Preprocessor definitions for this target.
SET(CMAKE_TARGET_DEFINITIONS
  "_FILE_OFFSET_BITS=64"
  "_LARGEFILE_SOURCE"
  "_LARGEFILE64_SOURCE"
  "_LARGE_FILES"
  )

# Targets to which this target links.
SET(CMAKE_TARGET_LINKED_INFO_FILES
  )


text:
<?php

use \Tsugi\Util\U;
use \Tsugi\Util\Git;
use \Tsugi\Util\Net;
use \Tsugi\Util\LTI;
use \Tsugi\Core\LTIX;
use \Tsugi\Core\Cache;
use \Tsugi\UI\Lessons;

if (!defined('COOKIE_SESSION')) define('COOKIE_SESSION', true);
require_once("../../config.php");
session_start();
if ( ! isset($_SESSION["admin"]) ) {
    Net::send403();
    die_with_error_log('Must be admin to list repositories');
}

$retval = array();

if ( ! isset($CFG->install_folder) ) {
    Net::send403();
    die_with_error_log('Install folder is not configured');
}

require_once("../admin_util.php");
require_once("install_util.php");

$PDOX = LTIX::getConnection();

// Load the Lesson
$l = false;
if ( isset($CFG->lessons) && $CFG->lessons && file_exists($CFG->lessons) ) {
    $l = new Lessons($CFG->lessons);
}

$available = array();
$required = array();
$installed = array();
$paths = array();

// In case we need a setuid or other copy of git
if ( isset($CFG->git_command) ) {
    Git::set_bin($CFG->git_command);
}

// Figure out the git version
$repo = new \Tsugi\Util\GitRepo($CFG->dirroot);
$git_version = $repo->run('--version');

// Gather the information for the tsugi folder
$origin = getRepoOrigin($repo);
$tsugi = new \stdClass();
$tsugi->clone_url = $origin; // Yes, it works..
$tsugi->html_url = $origin; // Yes, it works..
$tsugi->name = "Tsugi Admin";
$tsugi->description = "Tsugi Adminstration, Management, and Development Console.";
addRepoInfo($tsugi, $repo);
$install_writeable = $tsugi->writeable;
$tsugi->tsugitools = false;
$tsugi->index = count($installed) + 1;
$tsugi->path = $CFG->dirroot;
$tsugi->guid = md5($CFG->dirroot);
$installed[] = $tsugi;
$paths[$origin] = $CFG->dirroot;

$path = U::remove_relative_path($CFG->install_folder);
$folders = findAllFolders($path);

// Load the existing modules
$existing = array();
foreach($folders as $folder){
    $git = $folder . '/.git';
    if ( !is_dir($git) ) continue;

    try {
        $repo = new \Tsugi\Util\GitRepo($folder);
        // $origin = $repo->run('remote get-url origin'); // In git 2.0
        $origin = getRepoOrigin($repo);
        $existing[$origin] = $repo;
        $paths[$origin] = $folder;
    } catch (Exception $e) {
        $error = 'Caught exception: '.$e->getMessage(). "\n";
        $retval['error'] = $error;
        echo(json_encode($retval));
        die_with_error_log($error);
    }
}

// Check to see if there are any required repos we don't already have
if ( $l && isset($l->lessons->required_modules) ) foreach($l->lessons->required_modules as $needed) {
    if ( isset($existing[$needed]) || isset($existing[$needed.'.git'])) continue;
    $detail = new \stdClass();
    $detail->html_url = $needed;
    $detail->clone_url = $needed;
    $detail->name = $needed;
    $detail->description = '';
    $detail->index = count($required) + 1;
    $detail->writeable = $install_writeable; // Assume if we cannot update tsugi..
    $required[] = $detail;
}

// Check the tsugitools project in github
// Only retrieve fresh every 600 seconds unless forced
$fail = false;
$repos = Cache::check('repos',1);
if ( (! isset($_GET['force']) ) && $repos !== false ) {
    $expires = Cache::expires('repos',1);
    $note = 'Retrieved from session. Cached for '.$expires.' more seconds to avoid rate limit. Add ?force=yes to force pull from github before cache expires.';
} else {
    $url = 'https://api.github.com/users/tsugitools/repos?language=PHP';
    $headers = 'User-Agent: TsugiProject';
    $expiresec = 600;
    $repos_str = Net::doGet($url, $headers);
    $note = 'Retrieved from github API. Data is cached for '.$expiresec.' seconds to avoit github limit. Add ?force=yes to force pull from github before cache expires.';
    if ( strlen($repos_str) < 1 ) {
        $error = 'No data retrieved from '.$url;
        $retval['available_error'] = $error;
        $retval['available_error_detail'] = '';
        $fail = true;
    }
    // echo(LTI::jsonIndent($repos_str));
    $repos = json_decode($repos_str);
    if ( $repos === null ) {
        $error = 'Unable to decode '.$url;
        $retval['available_error'] = $error;
        $retval['available_error_detail'] = $repos_str;
        $fail = true;
    }

    if ( is_object($repos) ) {
        $error = 'Did not get list of repositories: '.$url;
        $retval['available_error'] = $error;
        $retval['available_error_detail'] = json_encode($repos,JSON_PRETTY_PRINT);
        $fail = true;
    }

    if ( ! $fail ) Cache::set('repos',1,$repos,$expiresec);
}

// Loop through the tsugitools repos and get detail
if ( ! $fail ) foreach($repos as $repo) {
    $detail = new \stdClass();
    $detail->html_url = $repo->html_url;
    $detail->clone_url = $repo->clone_url;
    $detail->name = ucfirst($repo->name);
    $detail->description = $repo->description;
    $detail->tsugitools = true;
    if ( isset($existing[$detail->clone_url]) ) {
        $detail->existing = true;
        $detail->path = $paths[$detail->clone_url];
        $detail->guid = md5($paths[$detail->clone_url]);
        $repo = $existing[$detail->clone_url];
        addRepoInfo($detail, $repo);
        unset($existing[$detail->clone_url]);
        $detail->index = count($installed) + 1;
        $installed[] = $detail;
    } else {
        $detail->writeable = $install_writeable; // Assume if we cannot update tsugi..
        $detail->index = count($available) + 1;
        $available[] = $detail;
    }
}

// The ones we have that are not from tsugitools
foreach($existing as $clone_url => $repo) {
    $detail = new \stdClass();
    $detail->clone_url = $clone_url; // Yes, it works..
    $detail->html_url = $clone_url; // Yes, it works..
    $detail->name = "";
    preg_match( '/([^\/]+)\.git/', $clone_url, $match );

    if(count($match) == 2) {
        $detail->name = ucwords(preg_replace("/[^0-9a-zA-Z]/", " ", $match[1]));
    }
    $detail->description = "";
    addRepoInfo($detail, $repo);
    $detail->tsugitools = false;
    $detail->writeable = $install_writeable; // Assume if we cannot update tsugi..
    $detail->index = count($installed) + 1;
    if ( isset($paths[$clone_url]) ) {
        $detail->path = $paths[$clone_url];
        $detail->guid = md5($paths[$clone_url]);
    }
    $installed[] = $detail;
}

/*
{
            "clone_url": "https:\/\/github.com\/tsugiproject\/tsugi.git",
            "html_url": "https:\/\/github.com\/tsugiproject\/tsugi.git",
            "name": "Tsugi Admin",
            "description": "Tsugi Adminstration, Management, and Development Console.",
            "writeable": true,
            "update_note": "Fetching origin\n",
            "status_note": "On branch master\nYour branch is up-to-date with 'origin\/master'.\nnothing to commit (use -u to show untracked files)\n",
            "updates": false,
            "tsugitools": false,
            "index": 1,
            "path": "\/Applications\/MAMP\/htdocs\/tsugi",
            "guid": "817a628fa3231ccba37d5a061620708a"
*/
// Update the database view of these tools
$serverIP = Net::serverIP();
foreach($installed as $tool ) {

    // This is a gentle insert - to make sure there is at least one entry in lms_tools
    // If we are in a scalable cluster, we might be behind so we should not assume
    // our view is the right view
    $sql = "INSERT INTO {$CFG->dbprefix}lms_tools
        ( toolpath, name, description, clone_url, gitversion, created_at, updated_at ) VALUES
        ( :toolpath, :name, :description, :clone_url, :gitversion, NOW(), NOW() )
        ON DUPLICATE KEY
        UPDATE name=:name, description=:description ";
    $values = array(
        ":toolpath" => $tool->path,
        ":name" => $tool->name,
        ":description" => $tool->description,
        ":clone_url" => $tool->clone_url,
        ":gitversion" => 'master'
    );
    $q = $PDOX->queryReturnError($sql, $values);

    // Update the status for this cluster
    updateToolStatus($tool->path, $tool);
}

$retval['status'] = 'OK';
$retval['version'] = trim($git_version);
$retval['detail'] = $note;
$retval['available'] = $available;
$retval['installed'] = $installed;
$retval['required'] = $required;

echo(json_encode($retval, JSON_PRETTY_PRINT));


text:
var JQLite = angular.element;

JQLite.prototype.parents = function(selector) {
  var elem  = this[0],
    parents = [],
    firstChar;

  if (selector) firstChar = selector.charAt(0);

  for (; elem && elem !== document; elem = elem.parentNode) {
    if (selector) {

      if (firstChar === '.') {
        if (elem.classList.contains(selector.substr(1))) {
          parents.push(elem);
        }
      }

      if (firstChar === '#') {
        if (elem.id === selector.substr(1)) {
          parents.push( elem );
        }
      }

      if (firstChar === '[') {
        if (elem.hasAttribute(selector.substr(1, selector.length - 1))) {
          parents.push(elem);
        }
      }

      if (elem.tagName.toLowerCase() === selector) {
        parents.push(elem);
      }

    } else {
      parents.push(elem);
    }
  }

  if (parents.length === 0) {
    return null;
  } else {
    return parents;
  }
};


text:
package org.apache.torque.engine.database.model;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.map.ListOrderedMap;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.torque.engine.EngineException;
import org.apache.torque.engine.platform.Platform;
import org.apache.torque.engine.platform.PlatformDefaultImpl;
import org.xml.sax.Attributes;

/**
 * A Class for holding data about a column used in an Application.
 *
 * @author Leon Messerschmidt
 * @author Jason van Zyl
 * @author Jon S. Stevens
 * @author Daniel Rall
 * @author Byron Foster
 * @author Martin Poeschl
 * @author Greg Monroe
 * @version $Id: Column.java,v 1.1 2007-10-21 07:57:27 abyrne Exp $
 */
public class Column
{
    private static final SchemaType DEFAULT_TYPE = SchemaType.VARCHAR;
    /** Logging class from commons.logging */
    private static Log log = LogFactory.getLog(Column.class);
    private String name;
    private String description;
    private Domain domain = new Domain();
    private String javaName = null;
    private String javaNamingMethod;
    private boolean isNotNull = false;
    private boolean isProtected = false;
    private String javaType;
    private Table parentTable;
    private int position;
    private boolean isPrimaryKey = false;
    private boolean isUnique = false;
    private boolean isAutoIncrement = false;
    private List referrers;
    // only one type is supported currently, which assumes the
    // column either contains the classnames or a key to
    // classnames specified in the schema.  Others may be
    // supported later.
    private String inheritanceType;
    private boolean isInheritance;
    private boolean isEnumeratedClasses;
    private List inheritanceList;
    private boolean needsTransactionInPostgres;

    /** generate is... setters for boolean columns if true */
    private boolean correctGetters = false;

    /** class name to do input validation on this column */
    private String inputValidator = null;
    private Map options;

    /**
     * Creates a new instance with a null name.
     */
    public Column()
    {
        this(null);
    }

    /**
     * Creates a new column and set the name
     *
     * @param name column name
     */
    public Column(String name)
    {
        this.name = name;
        options = Collections.synchronizedMap(new ListOrderedMap());
    }

    /**
     * Return a comma delimited string listing the specified columns.
     *
     * @param columns Either a list of Column objects, or
     * a list of String objects with column names.
     */
    public static String makeList(List columns)
    {
        Object obj = columns.get(0);
        boolean isColumnList = (obj instanceof Column);
        if (isColumnList)
        {
            obj = ((Column) obj).getName();
        }
        StringBuffer buf = new StringBuffer((String) obj);
        for (int i = 1; i < columns.size(); i++)
        {
            obj = columns.get(i);
            if (isColumnList)
            {
                obj = ((Column) obj).getName();
            }
            buf.append(", ").append(obj);
        }
        return buf.toString();
    }

    /**
     * Imports a column from an XML specification
     */
    public void loadFromXML(Attributes attrib)
    {
        String dom = attrib.getValue("domain");
        if (StringUtils.isNotEmpty(dom))
        {
            domain = new Domain(getTable().getDatabase().getDomain(dom));
        }
        else
        {
            domain = new Domain(getPlatform().getDomainForSchemaType(DEFAULT_TYPE));
            setType(attrib.getValue("type"));
        }
        //Name
        name = attrib.getValue("name");

        javaName = attrib.getValue("javaName");
        javaType = attrib.getValue("javaType");
        if (javaType != null && javaType.length() == 0)
        {
            javaType = null;
        }

        // retrieves the method for converting from specified name to
        // a java name.
        javaNamingMethod = attrib.getValue("javaNamingMethod");
        if (javaNamingMethod == null)
        {
            javaNamingMethod
                    = parentTable.getDatabase().getDefaultJavaNamingMethod();
        }

        //Primary Key
        String primaryKey = attrib.getValue("primaryKey");
        //Avoid NullPointerExceptions on string comparisons.
        isPrimaryKey = ("true".equals(primaryKey));

        // If this column is a primary key then it can't be null.
        if ("true".equals(primaryKey))
        {
            isNotNull = true;
        }

        // HELP: Should primary key, index, and/or idMethod="native"
        // affect isNotNull?  If not, please document why here.
        String notNull = attrib.getValue("required");
        isNotNull = (notNull != null && "true".equals(notNull));

        //AutoIncrement/Sequences
        String autoIncrement = attrib.getValue("autoIncrement");
        // autoincrement is false per default,
        // except if the column is a primary key
        // and the idMethod is native
        // and the platform's default id Method is identity
        // and autoIncrement is not excplicitly set to false
        isAutoIncrement = ("true".equals(autoIncrement)
                || (isPrimaryKey()
                    && IDMethod.NATIVE.equals(getTable().getIdMethod())
                    && Platform.IDENTITY.equals(
                            getPlatform().getNativeIdMethod())
                    && (!"false".equals(autoIncrement))));
        //Default column value.
        domain.replaceDefaultValue( attrib.getValue("default") );

        domain.replaceSize(attrib.getValue("size"));
        domain.replaceScale(attrib.getValue("scale"));

        inheritanceType = attrib.getValue("inheritance");
        isInheritance = (inheritanceType != null
                && !inheritanceType.equals("false"));

        this.inputValidator = attrib.getValue("inputValidator");
        description = attrib.getValue("description");

        isProtected = ("true".equals(attrib.getValue("protected")));
    }

    /**
     * Returns table.column
     */
    public String getFullyQualifiedName()
    {
        return (parentTable.getName() + '.' + name);
    }

    /**
     * Get the name of the column
     */
    public String getName()
    {
        return name;
    }

    /**
     * Set the name of the column
     */
    public void setName(String newName)
    {
        name = newName;
    }

    /**
     * Get the description for the Table
     */
    public String getDescription()
    {
        return description;
    }

    /**
     * Set the description for the Table
     *
     * @param newDescription description for the Table
     */
    public void setDescription(String newDescription)
    {
        description = newDescription;
    }

    /**
     * Get name to use in Java sources to build method names.
     *
     * @return the capitalised javaName
     */
    public String getJavaName()
    {
        if (javaName == null)
        {
            List inputs = new ArrayList(2);
            inputs.add(name);
            inputs.add(javaNamingMethod);
            try
            {
                javaName = NameFactory.generateName(NameFactory.JAVA_GENERATOR,
                                                    inputs);
            }
            catch (EngineException e)
            {
                log.error(e, e);
            }
        }
        return StringUtils.capitalize(javaName);
    }

    /**
     * Returns the name for the getter method to retrieve the value of this
     * column
     *
     * @return A getter method name for this column.
     * @since 3.2
     */
    public String getGetterName()
    {
        if (("boolean".equalsIgnoreCase(getJavaNative()) && isCorrectGetters()))
        {
            return "is" + StringUtils.capitalize(getJavaName());
        }
        else
        {
            return "get" + StringUtils.capitalize(getJavaName());
        }
    }

    /**
     * Returns the name for the setter method to set the value of this
     * column
     *
     * @return A setter method name for this column.
     * @since 3.2
     */
    public String getSetterName()
    {
        return "set" + StringUtils.capitalize(getJavaName());
    }

    /**
     * Get variable name to use in Java sources (= uncapitalised java name)
     */
    public String getUncapitalisedJavaName()
    {
        return StringUtils.uncapitalize(getJavaName());
    }

    /**
     * Returns the name of the constant that is used for the column in the Peer
     * class, e.g., RecordPeer.COLVARNAME.
     * Generally this will be a straight conversion to upper case.
     * But if the column name is equals to TABLE_NAME or
     * DATABASE_NAME (Torque predefined vars), the column name will have an _
     * prefixed, e.g. _TABLE_NAME.
     *

     * TODO: Handle delimited column names that have non-Java identifier
     * characters in them.
     *
     * @return The name to use in defining the Peer class column variable.
     */
    public String getPeerJavaName()
    {
        String peerName = name.toUpperCase();
        if ( peerName.equals("TABLE_NAME") ||
             peerName.equals("DATABASE_NAME")) {
            peerName = "_" + peerName;
        }
        return peerName;
    }

    /**
     * Set the name to use in Java sources.
     */
    public void setJavaName(String javaName)
    {
        this.javaName = javaName;
    }

    /**
     * Returns whether the type in the java object should be an object
     * or primitive.
     */
    public String getJavaType()
    {
        return javaType;
    }

    /**
     * Get the location of this column within the table (one-based).
     * @return value of position.
     */
    public int getPosition()
    {
        return position;
    }

    /**
     * Get the location of this column within the table (one-based).
     * @param v  Value to assign to position.
     */
    public void setPosition(int  v)
    {
        this.position = v;
    }

    /**
     * Set the parent Table of the column
     */
    public void setTable(Table parent)
    {
        parentTable = parent;
    }

    /**
     * Get the parent Table of the column
     */
    public Table getTable()
    {
        return parentTable;
    }

    /**
     * Returns the Name of the table the column is in
     */
    public String getTableName()
    {
        return parentTable.getName();
    }

    /**
     * A utility function to create a new column
     * from attrib and add it to this table.
     */
    public Inheritance addInheritance(Attributes attrib)
    {
        Inheritance inh = new Inheritance();
        inh.loadFromXML (attrib);
        addInheritance(inh);

        return inh;
    }

    /**
     * Adds a new inheritance definition to the inheritance list and set the
     * parent column of the inheritance to the current column
     */
    public void addInheritance(Inheritance inh)
    {
        inh.setColumn(this);
        if (inheritanceList == null)
        {
            inheritanceList = new ArrayList();
            isEnumeratedClasses = true;
        }
        inheritanceList.add(inh);
    }

    /**
     * Get the inheritance definitions.
     */
    public List getChildren()
    {
        return inheritanceList;
    }

    /**
     * Determine if this column is a normal property or specifies a
     * the classes that are represented in the table containing this column.
     */
    public boolean isInheritance()
    {
        return isInheritance;
    }

    /**
     * Determine if possible classes have been enumerated in the xml file.
     */
    public boolean isEnumeratedClasses()
    {
        return isEnumeratedClasses;
    }

    /**
     * Return the isNotNull property of the column
     */
    public boolean isNotNull()
    {
        return isNotNull;
    }

    /**
     * Set the isNotNull property of the column
     */
    public void setNotNull(boolean status)
    {
        isNotNull = status;
    }

    /**
     * Return NOT NULL String for this column
     *
     * @return "NOT NULL" if null values are not allowed or an empty String.
     */
    public String getNotNullString()
    {
        return getTable().getDatabase().getPlatform()
                .getNullString(this.isNotNull());
    }

    /**
     * Return the isProtected property of the column
     */
    public boolean isProtected()
    {
        return isProtected;
    }

    /**
     * Set the isProtected property of the Column
     */
    public void setProtected(boolean prot)
    {
        isProtected = prot;
    }

    /**
     * Set if the column is a primary key or not
     */
    public void setPrimaryKey(boolean pk)
    {
        isPrimaryKey = pk;
    }

    /**
     * Return true if the column is a primary key
     */
    public boolean isPrimaryKey()
    {
        return isPrimaryKey;
    }

    /**
     * Set true if the column is UNIQUE
     */
    public void setUnique (boolean u)
    {
        isUnique = u;
    }

    /**
     * Get the UNIQUE property
     */
    public boolean isUnique()
    {
        return isUnique;
    }

    /**
     * Return true if the column requires a transaction in Postgres
     */
    public boolean requiresTransactionInPostgres()
    {
        return needsTransactionInPostgres;
    }

    /**
     * Utility method to determine if this column is a foreign key.
     */
    public boolean isForeignKey()
    {
        return (getForeignKey() != null);
    }

    /**
     * Determine if this column is a foreign key that refers to the
     * same table as another foreign key column in this table.
     */
    public boolean isMultipleFK()
    {
        ForeignKey fk = getForeignKey();
        if (fk != null)
        {
            Iterator fks = parentTable.getForeignKeys().iterator();
            while (fks.hasNext())
            {
                ForeignKey key = (ForeignKey) fks.next();
                if (key.getForeignTableName().equals(fk.getForeignTableName())
                        && !key.getLocalColumns().contains(this.name))
                {
                    return true;
                }
            }
        }

        // No multiple foreign keys.
        return false;
    }

    /**
     * get the foreign key object for this column
     * if it is a foreign key or part of a foreign key
     */
    public ForeignKey getForeignKey()
    {
        return parentTable.getForeignKey(this.name);
    }

    /**
     * Utility method to get the related table of this column if it is a foreign
     * key or part of a foreign key
     */
    public String getRelatedTableName()
    {
        ForeignKey fk = getForeignKey();
        return (fk == null ? null : fk.getForeignTableName());
    }

    /**
     * Utility method to get the related column of this local column if this
     * column is a foreign key or part of a foreign key.
     */
    public String getRelatedColumnName()
    {
        ForeignKey fk = getForeignKey();
        if (fk == null)
        {
            return null;
        }
        else
        {
            return fk.getLocalForeignMapping().get(this.name).toString();
        }
    }

    /**
     * Adds the foreign key from another table that refers to this column.
     */
    public void addReferrer(ForeignKey fk)
    {
        if (referrers == null)
        {
            referrers = new ArrayList(5);
        }
        referrers.add(fk);
    }

    /**
     * Get list of references to this column.
     */
    public List getReferrers()
    {
        if (referrers == null)
        {
            referrers = new ArrayList(5);
        }
        return referrers;
    }

    /**
     * Sets the colunm type
     */
    public void setType(String torqueType)
    {
        SchemaType type = SchemaType.getEnum(torqueType);
        if (type == null)
        {
            log.warn("SchemaType " + torqueType + " does not exist");
            type = Column.DEFAULT_TYPE;
        }
        setType(type);
    }

    /**
     * Sets the colunm type
     */
    public void setType(SchemaType torqueType)
    {
        domain = new Domain(getPlatform().getDomainForSchemaType(torqueType));
        if (torqueType.equals(SchemaType.VARBINARY)
                || torqueType.equals(SchemaType.BLOB))
        {
            needsTransactionInPostgres = true;
        }
    }

    /**
     * Returns the column jdbc type as an object
     *
     * @deprecated the type conversion is handled by the platform package
     *             (since torque 3.2)
     */
    public Object getType()
    {
        return TypeMap.getJdbcType(domain.getType()).getName();
    }

    /**
     * Returns the column type as given in the schema as an object
     */
    public Object getTorqueType()
    {
        return domain.getType().getName();
    }

    /**
     * Utility method to see if the column is a string
     *
     * @deprecated will be removed after the 3.3 release
     */
    public boolean isString()
    {
        return (domain.getType().getName().indexOf ("CHAR") != -1);
    }

    /**
     * Utility method to return the value as an element to be usable
     * in an SQL insert statement. This is used from the SQL loader task
     */
    public boolean needEscapedValue()
    {
        String torqueType = domain.getType().getName();
        return (torqueType != null) && (torqueType.equals("VARCHAR")
                        || torqueType.equals("LONGVARCHAR")
                        || torqueType.equals("DATE")
                        || torqueType.equals("DATETIME")
                        || torqueType.equals("TIMESTAMP")
                        || torqueType.equals("TIME")
                        || torqueType.equals("CHAR")
                        || torqueType.equals("CLOB"));
    }

    /**
     * String representation of the column. This is an xml representation.
     *
     * @return string representation in xml
     */
    public String toString()
    {
        StringBuffer result = new StringBuffer();
        result.append("    <column name=\"").append(name).append('"');

        if (javaName != null)
        {
            result.append(" javaName=\"").append(javaName).append('"');
        }

        if (isPrimaryKey)
        {
            result.append(" primaryKey=\"").append(isPrimaryKey).append('"');
        }

        if (isNotNull)
        {
            result.append(" required=\"true\"");
        }
        else
        {
            result.append(" required=\"false\"");
        }

        result.append(" type=\"").append(domain.getType().getName()).append('"');

        if (domain.getSize() != null)
        {
            result.append(" size=\"").append(domain.getSize()).append('"');
        }

        if (domain.getScale() != null)
        {
            result.append(" scale=\"").append(domain.getScale()).append('"');
        }

        if (domain.getDefaultValue() != null)
        {
            result.append(" default=\"").append(domain.getDefaultValue()).append('"');
        }

        if (isInheritance())
        {
            result.append(" inheritance=\"").append(inheritanceType)
                .append('"');
        }

        // Close the column.
        result.append(" />\n");

        return result.toString();
    }

    /**
     * Returns the size of the column
     */
    public String getSize()
    {
        return domain.getSize();
    }

    /**
     * Set the size of the column
     */
    public void setSize(String newSize)
    {
        domain.setSize(newSize);
    }

    /**
     * Try to determine the precision of the field from the size attribute.
     * If size attribute is an integer number, it will be returned.
     * If size attribute is of the format "Precision,Scale", then Precision
     * will be returned.
     * If size is null or the size value is not an valid integer,
     * null is returned.
     *

     * Note: Unparseable values will be logged as a warning.
     *
     * @return The precision portion of the size attribute.
     */
    public String getPrecision()
    {
        String size = getSize();
        if ( size == null )
        {
            return size;
        }
        int cLoc = size.indexOf(',');
        if ( cLoc > 0 )
        {
            size = size.substring(0, cLoc);
        }
        try
        {
            Integer.parseInt(size);
        }
        catch ( NumberFormatException e  )
        {
            log.warn("getPrecision(): Size attribute found ("
                    + getSize()
                    + ") was not an integer number, using default of null!");
            size = null;
        }
        return size;
    }

    /**
     * Try to determine the scale of the field from the scale and size
     * attribute.
     * If scale attribute is an integer number, it will be returned.
     * If size attribute is of the format "Precision,Scale", then Scale
     * will be returned.
     * If scale and size attributes are null or the scale value found
     * is not an valid integer, a null value is returned.
     *

     * Note: Unparseable values will be logged as a warning.
     *
     * @return The precision portion of the size attribute.
     */
    public String getScale()
    {
        String scale = domain.getScale();
        // Check for scale on size attribute if no scale attribute
        if ( scale == null )
        {
            scale = getSize();
            if ( scale == null )   // No scale or size attribute set.
            {
                return scale;
            }
            int cLoc = scale.indexOf(',');
            if ( cLoc < 0 )        // Size did not have "P,S" format
            {
                return null;
            }
            scale = scale.substring(cLoc + 1 );
        }

        // Validate that scale string found is integer.
        try
        {
            Integer.parseInt(scale);
        }
        catch ( NumberFormatException e  )
        {
            log.warn("getScale(): Scale (or size=\"p,s\") attribute found ("
                    + scale
                    + ") was not an integer number, using default of null.");
            scale = null;
        }
        return scale;
    }

    /**
     * Set the scale of the column
     */
    public void setScale(String newScale)
    {
        domain.setScale(newScale);
    }

    /**
     * Return the size and scale in brackets for use in an sql schema.
     *
     * @return size and scale or an empty String if there are no values
     *         available.
     */
    public String printSize()
    {
        return domain.printSize();
    }

    /**
     * Return a string that will give this column a default value.
     * @deprecated
     */
     public String getDefaultSetting()
     {
         return domain.getDefaultSetting();
     }

    /**
     * Set a string that will give this column a default value.
     */
    public void setDefaultValue(String def)
    {
        domain.setDefaultValue(def);
    }

    /**
     * Get a string that will give this column a default value.
     */
    public String getDefaultValue()
    {
        return domain.getDefaultValue();
    }

    /**
     * Returns the class name to do input validation
     */
    public String getInputValidator()
    {
       return this.inputValidator;
    }

    /**
     * Return auto increment/sequence string for the target database. We need to
     * pass in the props for the target database!
     */
    public boolean isAutoIncrement()
    {
        return isAutoIncrement;
    }

    /**
     * Set the auto increment value.
     * Use isAutoIncrement() to find out if it is set or not.
     */
    public void setAutoIncrement(boolean value)
    {
        isAutoIncrement = value;
    }

    public String getAutoIncrementString()
    {
        if (isAutoIncrement()
                && IDMethod.NATIVE.equals(getTable().getIdMethod()))
        {
            return getPlatform().getAutoIncrement();
        }
        return "";
    }

    /**
     * Set the column type from a string property
     * (normally a string from an sql input file)
     */
    public void setTypeFromString(String typeName, String size)
    {
        String tn = typeName.toUpperCase();
        setType(tn);

        if (size != null)
        {
            domain.setSize(size);
        }

        if (tn.indexOf("CHAR") != -1)
        {
            domain.setType(SchemaType.VARCHAR);
        }
        else if (tn.indexOf("INT") != -1)
        {
            domain.setType(SchemaType.INTEGER);
        }
        else if (tn.indexOf("FLOAT") != -1)
        {
            domain.setType(SchemaType.FLOAT);
        }
        else if (tn.indexOf("DATE") != -1)
        {
            domain.setType(SchemaType.DATE);
        }
        else if (tn.indexOf("TIME") != -1)
        {
            domain.setType(SchemaType.TIMESTAMP);
        }
        else if (tn.indexOf("BINARY") != -1)
        {
            domain.setType(SchemaType.LONGVARBINARY);
        }
        else
        {
            domain.setType(SchemaType.VARCHAR);
        }
    }

    /**
     * Return a string representation of the
     * Java object which corresponds to the JDBC
     * type of this column. Use in the generation
     * of MapBuilders.
     */
    public String getJavaObject()
    {
        return TypeMap.getJavaObject(domain.getType());
    }

    /**
     * Return a string representation of the primitive java type which
     * corresponds to the JDBC type of this column.
     *
     * @return string representation of the primitive java type
     */
    public String getJavaPrimitive()
    {
        return TypeMap.getJavaNative(domain.getType());
    }

    /**
     * Return a string representation of the native java type which corresponds
     * to the JDBC type of this column. Use in the generation of Base objects.
     * This method is used by torque, so it returns Key types for primaryKey and
     * foreignKey columns
     *
     * @return java datatype used by torque
     */
    public String getJavaNative()
    {
        String jtype = TypeMap.getJavaNativeObject(domain.getType());
        if (isUsePrimitive())
        {
            jtype = TypeMap.getJavaNative(domain.getType());
        }

        return jtype;
    }

    /**
     * Return Village asX() method which corresponds to the JDBC type
     * which represents this column.
     */
    public String getVillageMethod()
    {
        String vmethod = TypeMap.getVillageObjectMethod(domain.getType());
        if (isUsePrimitive())
        {
            vmethod = TypeMap.getVillageMethod(domain.getType());
        }

        return vmethod;
    }

    /**
     * Return ParameterParser getX() method which
     * corresponds to the JDBC type which represents this column.
     */
    public String getParameterParserMethod()
    {
        return TypeMap.getPPMethod(domain.getType());
    }

    /**
     * Returns true if the column type is boolean in the
     * java object and a numeric (1 or 0) in the db.
     */
    public boolean isBooleanInt()
    {
        return TypeMap.isBooleanInt(domain.getType());
    }

    /**
     * Returns true if the column type is boolean in the
     * java object and a String ("Y" or "N") in the db.
     */
    public boolean isBooleanChar()
    {
        return TypeMap.isBooleanChar(domain.getType());
    }

    /**
     * Returns true if the column type is boolean in the
     * java object and a Bit ("1" or "0") in the db.
     */
    public boolean isBit()
    {
        return TypeMap.isBit(domain.getType());
    }

    /**
     * returns true, if the columns java native type is an
     * boolean, byte, short, int, long, float, double, char
     */
    public boolean isPrimitive()
    {
        String t = getJavaNative();
        return "boolean".equals(t)
            || "byte".equals(t)
            || "short".equals(t)
            || "int".equals(t)
            || "long".equals(t)
            || "float".equals(t)
            || "double".equals(t)
            || "char".equals(t);
    }

    public boolean isUsePrimitive()
    {
        String s = getJavaType();
        return (s != null && s.equals("primitive"))
            || (s == null && !"object".equals(
               getTable().getDatabase().getDefaultJavaType()));
    }

    /**
     * @return Returns the domain.
     */
    public Domain getDomain()
    {
        return domain;
    }

    /**
     * @param domain The domain to set.
     */
    public void setDomain(Domain domain)
    {
        this.domain = domain;
    }

    private Platform getPlatform()
    {
        try
        {
            return getTable().getDatabase().getPlatform();
        }
        catch (Exception ex)
        {
            log.warn("could not load platform implementation");
        }
        return new PlatformDefaultImpl();
    }

    public String getSqlString()
    {
        List resultList = new ArrayList();
        resultList.add(getName());

        String type = getDomain().getSqlType();

        if (getPlatform().hasSize(getDomain().getSqlType()))
        {
            type += getDomain().printSize();
        }

        resultList.add(type);

        String defaultStr = getPlatform().filterInvalidDefaultValues( getDomain().getDefaultValue() );
        if (StringUtils.isNotEmpty(defaultStr)) {

            resultList.add("default");

            if (TypeMap.isTextType(getDomain().getType()) && !getPlatform().isSpecialDefault( defaultStr ) ) {
                // TODO: Properly SQL-escape the text.
                resultList.add(
                        new StringBuffer()
                        .append('\'')
                        .append(getDefaultValue())
                        .append('\''));
            } else {
                resultList.add(getDefaultValue());
            }
        }
        if (getPlatform().createNotNullBeforeAutoincrement())
        {
            if (StringUtils.isNotEmpty(getNotNullString()))
            {
                resultList.add(getNotNullString());
            }
        }
        if (StringUtils.isNotEmpty(getAutoIncrementString()))
        {
            resultList.add(getAutoIncrementString());
        }
        if (!getPlatform().createNotNullBeforeAutoincrement())
        {
            if (StringUtils.isNotEmpty(getNotNullString()))
            {
                resultList.add(getNotNullString());
            }
        }
        return StringUtils.join(resultList.iterator(), ' ');
    }

    /**
     * Return the correctGetters property of the column
     *
     * @return The currentValue of the correctGetters property.
     * @since 3.2
     */
    public boolean isCorrectGetters()
    {
        return correctGetters;
    }

    /**
     * Set the correctGetters property of the column. If set to true, the
     * column returns is<xxx> as the getter name which is correct for the
     * Bean Specs but incompatible to pre-3.2 releases.
     *
     * @param correctGetters The new value of the correctGetters property.
     * @since 3.2
     */
    public void setCorrectGetters(boolean correctGetters)
    {
        this.correctGetters = correctGetters;
    }

    /**
     * Get the value of the inheritance attribute defined in the schema XML.
     *
     * @return Returns the inheritanceType.
     */
    public String getInheritanceType()
    {
        return inheritanceType;
    }

    /**
     * Add an XML Specified option key/value pair to this element's option set.
     *
     * @param key the key of the option.
     * @param value the value of the option.
     */
    public void addOption(String key, String value)
    {
        options.put( key, value );
    }

    /**
     * Get the value that was associated with this key in an XML option
     * element.
     *
     * @param key the key of the option.
     * @return The value for the key or a null.
     */
    public String getOption(String key)
    {
        return (String) options.get(key);
    }

    /**
     * Gets the full ordered hashtable array of items specified by XML option
     * statements under this element.

     *
     * Note, this is not thread save but since it's only used for
     * generation which is single threaded, there should be minimum
     * danger using this in Velocity.
     *
     * @return An Map of all options. Will not be null but may be empty.
     */
    public Map getOptions()
    {
        return options;
    }
}