function fnIsValidForMove(oOverlay, bOnRegistration) {
		var	oDesignTimeMetadata = oOverlay.getDesignTimeMetadata();
		var oParentElementOverlay = oOverlay.getParentElementOverlay();
		// if the overlay has 'not-adaptable' as action it should also not be movable
		var bNotAdaptable = oDesignTimeMetadata.markedAsNotAdaptable();

		if (!oDesignTimeMetadata || !oParentElementOverlay || bNotAdaptable) {
			return Promise.resolve(false);
		}

		// Direct children of template aggregations should not be movable
		// because their order is defined based on the underlying data
		var oElement = oOverlay.getElement();
		if (ElementUtil.isElementDirectTemplateChild(oElement)) {
			return Promise.resolve(false);
		}

		var oRelevantContainer = oOverlay.getRelevantContainer();
		var oRelevantContainerOverlay = OverlayRegistry.getOverlay(oRelevantContainer);
		if (!oRelevantContainerOverlay) {
			return Promise.resolve(false);
		}

		return this.isMoveAvailableOnRelevantContainer(oOverlay)
			.then(function(bValid) {
				if (bValid) {
					bValid = this.oBasePlugin.hasStableId(oOverlay) &&
					this.oBasePlugin.hasStableId(oParentElementOverlay) &&
					this.oBasePlugin.hasStableId(oRelevantContainerOverlay);
				}
				return bValid;
			}.bind(this))
			.then(function(bValid) {
				// element is only valid for move if it can be moved to somewhere else
				if (bValid) {
					return fnCheckForValidTargetZones.call(this, oOverlay, oRelevantContainerOverlay, bOnRegistration);
				}
				return bValid;
			}.bind(this));
	}
/**
	 * Check if the element is editable for the move
	 * @param  {sap.ui.dt.Overlay}  oOverlay The overlay being moved or the aggregation overlay
	 * @param  {boolean} bOnRegistration if embedded, false if not
	 * @return {Promise.<boolean>} promise with true value if editable
	 */
Check if the element is editable for the move
@param  {sap.ui.dt.Overlay}  oOverlay The overlay being moved or the aggregation overlay
@param  {boolean} bOnRegistration if embedded, false if not
@return {Promise.} promise with true value if editable
Check if the element is editable for the move @param { sap . ui . dt . Overlay } oOverlay The overlay being moved or the aggregation overlay @param { boolean } bOnRegistration if embedded false if not @return { Promise . } promise with true value if editable
function fnIsValidForMove(oOverlay, bOnRegistration) {
		var	oDesignTimeMetadata = oOverlay.getDesignTimeMetadata();
		var oParentElementOverlay = oOverlay.getParentElementOverlay();
		var bNotAdaptable = oDesignTimeMetadata.markedAsNotAdaptable();
		if (!oDesignTimeMetadata || !oParentElementOverlay || bNotAdaptable) {
			return Promise.resolve(false);
		}
		var oElement = oOverlay.getElement();
		if (ElementUtil.isElementDirectTemplateChild(oElement)) {
			return Promise.resolve(false);
		}
		var oRelevantContainer = oOverlay.getRelevantContainer();
		var oRelevantContainerOverlay = OverlayRegistry.getOverlay(oRelevantContainer);
		if (!oRelevantContainerOverlay) {
			return Promise.resolve(false);
		}
		return this.isMoveAvailableOnRelevantContainer(oOverlay)
			.then(function(bValid) {
				if (bValid) {
					bValid = this.oBasePlugin.hasStableId(oOverlay) &&
					this.oBasePlugin.hasStableId(oParentElementOverlay) &&
					this.oBasePlugin.hasStableId(oRelevantContainerOverlay);
				}
				return bValid;
			}.bind(this))
			.then(function(bValid) {
				if (bValid) {
					return fnCheckForValidTargetZones.call(this, oOverlay, oRelevantContainerOverlay, bOnRegistration);
				}
				return bValid;
			}.bind(this));
	}
function fnIsValidForMove ( oOverlay , bOnRegistration ) { var oDesignTimeMetadata = oOverlay . getDesignTimeMetadata ( ) ; var oParentElementOverlay = oOverlay . getParentElementOverlay ( ) ; var bNotAdaptable = oDesignTimeMetadata . markedAsNotAdaptable ( ) ; if ( ! oDesignTimeMetadata || ! oParentElementOverlay || bNotAdaptable ) { return Promise . resolve ( false ) ; } var oElement = oOverlay . getElement ( ) ; if ( ElementUtil . isElementDirectTemplateChild ( oElement ) ) { return Promise . resolve ( false ) ; } var oRelevantContainer = oOverlay . getRelevantContainer ( ) ; var oRelevantContainerOverlay = OverlayRegistry . getOverlay ( oRelevantContainer ) ; if ( ! oRelevantContainerOverlay ) { return Promise . resolve ( false ) ; } return this . isMoveAvailableOnRelevantContainer ( oOverlay ) . then ( function ( bValid ) { if ( bValid ) { bValid = this . oBasePlugin . hasStableId ( oOverlay ) && this . oBasePlugin . hasStableId ( oParentElementOverlay ) && this . oBasePlugin . hasStableId ( oRelevantContainerOverlay ) ; } return bValid ; } . bind ( this ) ) . then ( function ( bValid ) { if ( bValid ) { return fnCheckForValidTargetZones . call ( this , oOverlay , oRelevantContainerOverlay , bOnRegistration ) ; } return bValid ; } . bind ( this ) ) ; }
Check if the element is editable for the move
 @param  {sap.ui.dt.Overlay}  oOverlay The overlay being moved or the aggregation overlay
 @param  {boolean} bOnRegistration if embedded, false if not
 @return {Promise.<boolean>} promise with true value if editable
Check if the element is editable for the move @param { sap . ui . dt . Overlay } oOverlay The overlay being moved or the aggregation overlay @param { boolean } bOnRegistration if embedded false if not @return { Promise . <boolean > } promise with true value if editable
// if the overlay has 'not-adaptable' as action it should also not be movable // Direct children of template aggregations should not be movable // because their order is defined based on the underlying data // element is only valid for move if it can be moved to somewhere else